2010-06-26 140 views
3

我有一個遠程只讀git存儲庫A,我已經克隆在我的本地文件系統。定期更新A,並在每次更新後,在系統中提取併合並更新後的代碼。Git:如何使用多個存儲庫?

我想與我的團隊成員協作處理A的文件,爲此我創建了一個新的遠程存儲庫B

如何設法將B與我的本地存儲庫同步?我想了解適當的命令序列和配置選項來實現我的目標。以下是我希望能夠解決的情況: 1.在有更新後從A拉出,將其推到B. 2.從A拉出,與我的本地文件合併,然後將其推入B,合併與B回購。 3.我想所有的A,我的本地回購和B有相同的分支機構。

我會感謝任何幫助。 如果我的問題不是很清楚,請提及它,我會嘗試編輯它。 謝謝。

+0

我推薦閱讀'git help workflows',它主要是關於分支管理,但是一旦你掌握了管理衆多知識庫的信息似乎不那麼繁重。 – xenoterracide 2010-07-12 04:42:21

回答

1

我假設你有兩個名爲A和B的遙控器只配置了url。如果您不遵循參考文獻,請閱讀ProGit書中的relevant chapter

1:從拉後有更新,將其推到B

$ # pull = fetch + (often fast-forward merge) 
$ git fetch A # fetches all objects from A (all branches, commits; everything) 
$ git push B 'refs/remotes/A/*:refs/heads/*' 
$ # I've quoted so that the shell doesn't try to expand the * 

編輯:我以爲你不希望合併修改到你的地方分支機構。

2:從一拉,與本地文件合併,然後將其推到B,與回購上B.合併

$ git pull A # fetch + attempt to merge changes in all branches 
$ # Resolve any conflicts here 
$ git push B '+refs/heads/*:refs/heads/*' # omit the + if it's a FF push 
$ # Default is to push matching branches 

編輯:以上不合並的變化B.如果你想這樣做,你必須從B中提取變更,並在推送前將它們合併到你的本地分支機構。

3:我想所有的A,我的本地回購和B具有相同的分支

$ git pull A 
$ git checkout branchx 
$ git reset --hard A/branchx # Warning! All local changes will be destroyed 
$ # Repeat the above for all branches 
$ git push B '+refs/heads/*:refs/heads/*' # Warning! Data in B is overwritten 

編輯:如果你想刪除過時的跟蹤分支,運行

$ git remote prune A 
$ git remote prune B 
0

我建議在有B的主機上設置cronjob。這種方式更新從回購A正在及時拉(例如說兩個小時)。而你只需要從B拉。

+0

A上的只讀回購包含更新,我的團隊必須處理該回購。爲此,現在,我們所有人都在我們的本地機器中克隆了A,並且每當新的更新到達時我們都會拉。我們處理本地文件並相互交換文件。 但我希望我們的團隊擁有一個私人回購B,我們可以在其上推送更新(以便我們其他人可以保持同步)。 我沒有ssh訪問B(或創建cron作業的權限)。我想學習正確的方法來完成任務 - 之後,我將自己決定一個合適的自動化機制。 – vpk 2010-06-29 07:00:36

2

你可以嘗試

混帳克隆repoB網址...
git的遠程添加repoA URL到repoA
混帳拉repoA

1)

git pull repoA
git push repoB

2)

GIT中拉repoA
GIT中結帳本地分支到合併
GIT中合併repoA /遠程分支到合併
GIT中推repoB

3) 我不確定是否有任何技巧可以通過一個命令檢出repoA上的所有分支到repoB或本地repo ...如果沒有,您可以隨時手動完成^ h

git的結帳--track -b BRANCH1 repoA/BRANCH1

,當你推,他們應該推到相應的分支遠程

+0

感謝@insidepower的幫助。我們可以從一個遠程回購拉動並推入另一個遠程回購?我是否需要更改一些配置設置(如遠程repo1和遠程repo2的URL)? – vpk 2010-06-29 07:02:10

+0

@jjossarin:你只需要做「git remote add 」然後git push ... – ken 2010-06-29 15:44:44