2008-10-03 17 views
11

Wir arbeiten hier mit einem semi-zentralisierten Git Repository, wo ich arbeite. Jeder Entwickler hat seine eigene Unterstruktur im zentralen Git Repository, so sieht es etwa so:Kann ich lokale Zweige zu entfernten Zweigen mit unterschiedlichen Präfixen in git zuordnen?

master 
alice/branch1 
alice/branch2 
bob/branch1 
michael/feature 
release/1.0 
release/1.1

Arbeiten vor Ort in meinem Baum Ich topic/feature habe, die im zentralen Baum zu michael/feature entspricht.

Ich habe mit

git push origin topic/feature:michael/feature 

meine Änderungen an den entfernten Baum zu schieben. Dies ist jedoch umständlich und fehleranfällig (z. B. unter Weglassen des Entwicklernamens, Fehleingabe des Merkmalsnamens usw.).

Ich bin auf der Suche nach einem saubereren Weg, dies zu tun. Zum Beispiel "git push". Ich vermute, dass das Einstellen einer anderen Fernbedienung mit einem modifizierten Fetch Refspec es tun wird, aber ich bin nicht sicher, wie genau es gemacht wird. Ich bin mir auch nicht sicher, wie ich meine aktuellen Filialdefinitionen modifizieren kann, um die verschiedenen Fernbedienungen zu benutzen.

Mein aktueller .git/config sieht ungefähr so ​​aus:

[remote "origin"] 
    url = git://central/git/project 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "topic/feature"] 
    remote = origin 
    merge = refs/heads/michael/project

Edit: ich auch diese anwenden möchten zieht/abruft. Aber kümmert sich die branch.<name>.merge darum?

Ich werde weiter hier recherchieren und hier posten, wenn ich etwas finde, aber ich hoffe, andere gute Ideen zu bekommen.

Bearbeiten 2: Ich habe beschlossen, ich werde lokale und Remote-Zweignamen die gleiche beibehalten. Es scheint, es wird die geringste Arbeit und am wenigsten anfällig für zukünftige Probleme sein.

+0

Wenn Sie die Datei .git/config ändern, vergessen Sie nicht, die Datei zuerst zu sichern. Wenn Sie etwas vermasseln, müssen Sie nur die bekannte gute Version der Datei wiederherstellen, um in den entsprechenden Zustand zurückzukehren. – webmat

+0

Das kommt tatsächlich viel bei der Bereitstellung von Git zu Host-Dienste wie Heroku, Nodester und AppFog. – studgeek

Antwort

3

Wenn Sie können, empfehle ich, dass Sie die gleichen Zweigstellen lokal & Remote verwenden. Dann verschiebt git push alle Ihre lokalen Niederlassungen zu entsprechenden Filialen im zentralen Repository.

Um verschiedene Präfixe in lokalen und Remote-Repos zu verwenden, müssen Sie jedes Mal, wenn Sie einen neuen Feature-Zweig erstellen, Ihrer Konfigurationsdatei eine Zuordnung hinzufügen. Der Befehl, um die Zuordnung für Thema/branch_name einzurichten ist

git config remote.origin.push refs/heads/topic/BRANCH_NAME:michael/BRANCH_NAME 
4

Fügen Sie in Ihrem Abschnitt [remote "Ursprung"] eine Zeile pro Zuordnung hinzu. Einschließlich Master zum Master.

push = refs/heads/master:master 
push = refs/heads/topic/feature:michael/feature 

Ich bin nicht sicher, wie es mit dem Befehl git-config zu tun ist.

Beachten Sie, dass ab jetzt alle Zweige gleichzeitig gedrückt werden, wenn Sie einen direkten Git Push (ohne Parameter) ausführen.

Möchten Sie erklären, warum Sie nicht dieselben Branchennamen lokal und remote beibehalten?

+0

Guter Punkt über das Halten der Zweige, die zusammenpassen ... Ich kann dazu wechseln. Statt dessen ist es möglich, Wildcards in die Push-Mappings aufzunehmen, ähnlich dem generischen in der Frage? –

1

Sie Ihre Niederlassung zu verschiedenen Tracking-Zweig auf der Fernbedienung mit so etwas wie diese Karte können:

git remote add heroku [email protected]:YOURAPPNAME.git 
git checkout -b heroku -t heroku/master 

Ihre Konfiguration endet ähnlich dem, was @Paul schlägt vor (ein bisschen "einfacher" eigentlich).

Sehen Sie diesen Grund (mit Tweaks von mir) für Verwendungsschritte, die gut für mich funktionieren https://gist.github.com/2002048.