簡體   English   中英

從本地開始的集中式 Git 存儲庫

[英]Centralized Git repository starting from local

假設我想使用類似 SVN 的工作流來解決 Git 存儲庫(因此每個開發人員都引用了一個 URL 上的集中存儲庫)。

我知道您可以不受限制地推送到 Bare 存儲庫(但有組權限等),但是如果不使用 force 選項,則不能在常規存儲庫上。 所以像中央存儲庫這樣的“SVN”應該被初始化為裸。 我理解正確嗎?

現在,我想知道從已經有 git 存儲庫(還沒有克隆或遠程鏈接)、源文件以及可能有 1 個以上分支的本地文件夾中生成集中存儲庫的最短方法是什么。

現在我使用以下方法,但我不確定它是否足夠:

在遠程文件夾 my_project.git 上:

  • git init --bare

現在只在本地文件夾 my_project 上使用現有的 repo :

  • git remote add origin url_to_my_project.git
  • git push -u --all

這夠了嗎 ?

當我在另一個本地位置克隆集中式存儲庫時,新存儲庫似乎並不完全等同於原始本地副本。 在使用git branch -a命令時,我有兩種不同的結果,我的 git 知識目前還不足以理解發生了什么。

在原始本地存儲庫上:

> git branch -a
* master
  remotes/origin/master

在從集中遠程克隆的本地存儲庫上:

> git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

這兩個副本看起來不一樣究竟發生了什么?

提前致謝。

所以像中央存儲庫這樣的“SVN”應該被初始化為裸。 我理解正確嗎? 推送到裸存儲庫(沒有檢查任何工作樹,這可能會受到推送的影響)是最佳實踐

 git init --bare; # local: git remote add origin url_to_my_project.git git push -u --all

這夠了嗎 ?

是的。
如果您有一個偵聽器:ssh 守護程序(如“ 在服務器上獲取 Git ”中所述)或 HTTPS 服務器(用於智能 HTTP

當我在另一個本地位置克隆集中式存儲庫時,新存儲庫似乎並不完全等同於原始本地副本。
當使用git branch -a命令時,我有兩種不同的結果,

這是預期的:

遠程存儲庫上的分支被重命名為本地副本上的remote/<remote-name>/<branch-name> (默認情況下),以避免本地和遠程存儲庫之間的名稱沖突。

如果您想要類似 SVN 的行為(即共享相同的分支命名空間),您可以根據需要編輯.git/config上的映射:

# default configuration ('master' branch on remote corresponds to 'remotes/origin/master' branch on local)
[remote "origin"]
    url = git@github.com:example/url_to_my_project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

例如:

# SVN-like configuration ('master' branch on remote corresponds to 'master' branch on local)
[remote "origin"]
    url = git@github.com:example/url_to_my_project.git
    fetch = +refs/heads/master:refs/heads/master

也就是說,這不是推薦的或可擴展的方式,因為您需要在存儲庫的每個克隆上配置此映射。

有關更多詳細信息,請參閱Git Book相關問答中的 refspec 部分

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM