簡體   English   中英

Git可以將裸存儲庫克隆到另一個裸存儲庫

[英]Can Git clone a bare repository to another bare repository

我確信這可以做到,我只是不確定正確的方法。

我的方案是將USB驅動器,本地硬盤驅動器和網絡驅動器都連接到我的PC。 本地硬盤驅動器將包含本地工作的本地活動倉庫。 網絡驅動器(具有長UNC路徑!)將包含充當上游參考副本的主裸存儲庫(辦公室中的2個或3個協作者),而USB驅動器充當我的移動拷貝到一些外部PC的sneakernet(我的其他合作者有自己的驅動器,這可能會影響答案)。 (這是在windows msysgit上)。

正是關注USB驅動器的設置,並確保我將工作流指向正確的方向(請參閱使用-git-on-usb-stick-for-travel-code

  • 我應該克隆我的本地倉庫,還是克隆網絡倉庫?
  • 有哪些特殊標志可確保USB驅動器正確卸下? (-nohardlinks?)
  • 等等

您可以使用具有USB記憶棒的長UNC路徑從repo創建一個裸到裸克隆

cd /e/src
git clone --bare //server/path/to/your/network/repo.git

但我懷疑它只需一步就可以為你買得多。

鑒於您將在當地的活躍倉庫中工作,我會在USB記憶棒上創建一個裸倉庫

cd git init --bare /e/src/myproject.git

在本地活動倉庫中創建一個遠程

git remote add usb file:///e/src/myproject.git

然后根據需要推送它。

git push usb philip/cool-new-feature

上面的命令假設您的USB記憶棒是E:並且您的工作目錄在您的本地活動倉庫中。

據我了解您的問題,您至少有兩個不相交的協作者集合,具體取決於您的其他協作者是否共享他們自己的共同中央存儲庫,或者是否都在使用隔離的計算機。 這意味着USB記憶棒上的存儲庫是每個人(最終)都可以訪問的存儲庫,因此您的團隊成員將大部分時間花在“飛機上”上。

設計開發過程的建議:

  1. 避免您或其他人成為指定合並的情況。 相反,您希望團隊中的所有成員盡可能頻繁地集成,以保持沖突變更的可能性小且易於管理。
  2. 擁有脫節的合作者會增加某人打破其他人依賴的功能的風險,無論是通過看似無害的更改還是錯誤地解決合並沖突。 您應該使用快速的一鍵式方法來確定是否有任何回歸或新錯誤進入您的代碼。
  3. 每組協作者, 那些更頻繁訪問彼此的存儲庫或共享存儲庫而不是USB存儲庫的人,應該在他們之間實現持續集成。 當有來自USB記憶棒的新提交時,將其所擁有的內容與來自團隊其他成員的新代碼集成應該成為首要任務。

您可以這樣做的一種方法是讓每個人都保持干凈的主人,並僅在其他分支上進行更改。 物理擁有USB記憶棒是一種自然的集成令牌,因此當給定的協作者擁有它時,序列就會出現

git checkout master
git pull usb master     # should always be a fast-forward
git merge feature1
make test               # or whatever, and repeat until no breakage
git commit
git push usb master
git push shared master  # if appropriate
git merge feature2      # if necessary
...

我建議您創建主網絡倉庫的鏡像克隆:

cd /path/to/usb/drive
git clone --mirror url://to/main/network/repo/project.git

鏡像克隆是一個裸存儲庫,其中包含與原始存儲庫相同的分支,標記等。

不要擔心傳遞--no-hardlinks因為它不可能在文件系統之間進行硬鏈接。

每當您想要更新USB鏡像時,只需安裝它並運行以下命令:

cd /path/to/usb/drive/project.git
git remote update -p

如果你進入USB驅動器鏡像,那么將這些提交到主網絡倉庫的最佳方法是通過本地硬盤驅動器回購:

# initial setup
cd /path/to/local/project
git remote add usb /path/to/usb/drive/project.git

# grab the commits from the usb drive
git remote update -p

# merge the usb drive commits into your local master branch
git merge usb/master

# push the result up to the main network repo
git push

你可以從任何一個克隆。 一旦USB驅動器完成,您可以將其刪除。 你可以用后仔細檢查完整性

git fsck --full

暫無
暫無

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

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