[英]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記憶棒的長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記憶棒上的存儲庫是每個人(最終)都可以訪問的存儲庫,因此您的團隊成員將大部分時間花在“飛機上”上。
設計開發過程的建議:
您可以這樣做的一種方法是讓每個人都保持干凈的主人,並僅在其他分支上進行更改。 物理擁有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.