2017-08-11 14 views
0

私たちは2つの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を設定bからaにプッシュし、非裸のリポジトリに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 

しかし、これではありません両方のリポジトリに作業ディレクトリが必要であり、他のリポジトリのステータスに依存できないため、ソリューションです。

repo bからrepo a(またはこれと同等のもの)にプッシュします。私はrepoをからrepo aに引き出すことができることを認識しています。しかし、これはではなく、です。

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

Btw、現在のところ、仲介のローカルレポcを使用しています。 このような第3の(共通の)リポジトリを避ける方法を探しています。 中央リポジトリのない実際の種類の分散。 共通リポジトリの使用は安全で堅牢でシンプルであると私は理解しています。 私が興味を持っているのは、それがなくてもどういうふうに動作するのかを理解し、作業ツリーを持つ2つのリポジトリが直接通信するときにどこに問題があるのか​​を知ることです。 言い換えれば、安全で丈夫でシンプルでない場合、私は本当にその理由を正確に理解したいと思います。

+0

gitサブモジュールのようなものを意味しますか? 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 

そして今、あなたはレポBにレポAからプッシュします?これは一般的に、あなたはレポを動作させるのではなく、遠隔のレポに任せているので、珍しい設定です。したがって、この場合には、あなたは第三レポ作成します。

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

関連する問題