2017-08-11 5 views
0

Wir haben zwei Git-Repositories a und b. Beides sind lokale Repositories. Wie kann ich Push Repo b zu Repo a und Repo a zu Repo b?Wie kann ich sicher zu einem lokalen Git-Repository gelangen?

# 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" 

Was ich bisher versucht habe, ist a als bloße Repository zu setzen, drücken Sie b-a, und setzen a auf eine nicht-bare Repository:

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 

Aber das ist nicht eine Lösung, da beide Repositories ein Arbeitsverzeichnis haben müssen und wir nicht vom Status des anderen Repositorys abhängig sein können.

Bitte beachten Sie, dass ich Push aus Repo wollen ba (oder etwas Gleichwertiges) Repo. Ich bin mir bewusst, dass ich Repo b von Repo a ziehen kann. Aber das ist nicht was ich brauche.

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

Btw, derzeit verwenden wir einen Vermittler lokalen Repo c. Wir suchen nach einer Möglichkeit, ein solches (gemeinsames) Repository zu vermeiden. Art von Real ohne ein zentrales Repository verteilt. Ich verstehe die Verwendung des gemeinsamen Repository ist sicher, robust und einfach. Was mich interessiert ist zu verstehen, wie es ohne es funktionieren könnte, und lernen, wo die Probleme sind, wenn zwei Repositories mit funktionierenden Bäumen direkt kommunizieren. Mit anderen Worten: Wenn es nicht sicher, robust und einfach ist, würde ich gerne genau verstehen, warum.

+0

Meinst du sowas wie ein Git Submodul? https://git-scm.com/book/de/v2/Git-Tools-Submodules – McLemore

+0

was versuchst du zu tun? Warum müssen beide Repositories einen Arbeitsbaum haben?sollten Sie in Erwägung ziehen, sie zueinander zu rsyncing? – eis

+0

@McLemore: Nicht genau. AFIK Submodule sollen nicht symmetrisch arbeiten. d.h. A als Untermodul von B und B als Untermodul von A. – wolfrevo

Antwort

0

Wenn ich Sie richtig verstehe, haben Sie 2 repos lokal die (vereinfacht) sieht wie folgt aus:

a 
|- .git 
|- foo.txt 

und

b 
|- .git 
|- bar.txt 

Und jetzt wollen Sie aus Repo-A-Repo-B drücken ? Dies ist ein ungewöhnliches Setup, da Sie im Allgemeinen nicht zum repo arbeiten, sondern zum remoten Repo. Also in diesem Fall würden Sie 3. Repo erstellen:

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

Und würden Sie das Repo als „remote“ von verwenden:

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

Und dann kann man mit ihm wie bei jeder anderen Remote-Repo arbeiten .

Aber wenn Sie wirklich zu arbeiten Repo schieben wollen, dann müssen Sie auf .git Ordner schieben, so würde Ihr Befehl wie folgt aussehen:

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

Beachten Sie jedoch, dass dies nur Git dir aktualisieren und Arbeits Baum wird bleiben unberührt, bis jemand kommt und macht git checkout master.

Verwandte Themen