2017-08-11 145 views
0

我們有兩個git軟件庫ab。兩者都是本地存儲庫。我如何回購b回購a和回購a回購b如何安全地推送到本地git存儲庫?

# remove and create new '/tmp/repos' 
rm -rf /tmp/repos 
mkdir -p /tmp/repos 

# create (init) and config repo 'a' 
git init /tmp/repos/a 
git -C /tmp/repos/a config user.email "[email protected]" 
git -C /tmp/repos/a config user.name "name_a" 

# clone and config repo 'a' to repo 'b' 
git clone /tmp/repos/a /tmp/repos/b 
git -C /tmp/repos/b config user.email "[email protected]" 
git -C /tmp/repos/b config user.name "name_b" 

# create file './text.txt' in repo 'b', add it, and commit it 
echo "first line" > /tmp/repos/b/test.txt 
git -C /tmp/repos/b add ./test.txt 
git -C /tmp/repos/b commit ./test.txt -m "add first line" 

我到目前爲止已經試過是設置a爲純倉庫,從推到ba,並重置a到非純倉庫:

git -C /tmp/repos/a config --bool core.bare true 
git -C /tmp/repos/b push origin master 
git -C /tmp/repos/a config --bool core.bare false 

但這不是一個解決方案,因爲這兩個存儲庫必須有一個工作目錄,我們不能依賴於其他存儲庫的狀態。

請注意,我希望從回購b推回購買a(或類似的東西)。我知道我可以從回購a拉回購b。但這是而不是我所需要的。

git -C /tmp/repos/a pull /tmp/repos/b 

順便說一句,目前我們正在使用中間本地回購c。 我們正在尋找一種方法來避免這樣的第三個(公共)存儲庫。 沒有中央存儲庫的實際分佈類型。 我知道使用公共存儲庫是安全,健壯和簡單的。 我感興趣的是瞭解它如何在沒有它的情況下工作, 並瞭解兩個存儲庫與工作樹直接通信時的問題所在。換句話說:如果它不安全,健壯和簡單,我想真正明白爲什麼。

+0

你的意思是像git submodule的東西? https://git-scm.com/book/en/v2/Git-Tools-Submodules – McLemore

+0

你想做什麼?爲什麼這兩個存儲庫必須有一個工作樹?你應該考慮讓他們彼此相處嗎? – eis

+0

@McLemore:不完全。 AFIK子模塊不打算以對稱方式工作。即A作爲B和B的子模塊作爲A的子模塊。 – wolfrevo

回答

0

如果我理解正確的話,您可以選擇本地2個回購其(簡化)看起來是這樣的:

a 
|- .git 
|- foo.txt 

b 
|- .git 
|- bar.txt 

現在你想從回購一推,回購乙?這是不尋常的設置,因爲一般情況下,您不推動工作回購,而是遠程回購。因此,在這種情況下,您將創建3日回購:

mkdir c.git && cd c && git init --bare 

你會使用回購作爲您「遠程」:

git remote add origin /path/to/c.git 

然後你就可以使用它與任何其他遠程回購。

但如果你真的要推到工作回購,那麼你需要推到.git文件夾,因此您的命令看起來像:

git push /path/to/b/.git master 

但是請記住,這隻會更新的Git目錄和工作樹會保持不動,直到有人來做git checkout master