2008-10-03 19 views
11

Pracujemy z częściowo scentralizowanym repozytorium git tutaj, gdzie pracuję. Każdy deweloper ma własne poddrzewo w centralnym repozytorium git, tak to wygląda mniej więcej tak:Czy mogę mapować lokalne gałęzie do odległych oddziałów z różnymi prefiksami w git?

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

Praca lokalnie w moim drzewie mam topic/feature, co odpowiada michael/feature w centralnej drzewa.

Używam

git push origin topic/feature:michael/feature 

do pchania moje zmiany do odległego drzewa. Jest to jednak uciążliwe i podatne na błędy (np. Pomijanie nazwy programisty, błędne wpisanie nazwy funkcji itp.).

Szukam czystszego sposobu na zrobienie tego. Na przykład "git push". Podejrzewam, że ustawienie innego pilota ze zmodyfikowanym refspec do pobrania zrobi to, ale nie jestem pewien, jak dokładnie to zrobić. Nie jestem również pewien, jak zmodyfikować moje obecne definicje gałęzi, aby użyć innego pilota.

mojego obecnego .git/config wyglądał:

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

Edit: Chciałbym również, aby zastosować to ciągnie/pobiera. Ale czy zajmuje się tym branch.<name>.merge?

Będę nadal badał to i zamieszczał tutaj, jeśli coś znajdę, ale mam nadzieję, że otrzymam inne dobre pomysły.

Edytuj 2: Zdecydowałem, że zachowam lokalne i zdalne nazwy oddziałów. Wydaje się, że będzie to najmniej pracy i najmniej podatne na przyszłe problemy.

+0

Po zmodyfikowaniu pliku .git/config, nie zapomnij najpierw wykonać jego kopii zapasowej. Jeśli coś zgnijesz, wystarczy przywrócić znaną dobrą wersję pliku, aby powrócić do odpowiedniego stanu. – webmat

+0

To faktycznie pojawia się dużo podczas wdrażania git do hostowania usług takich jak Heroku, Nodester i AppFog. – studgeek

Odpowiedz

3

Jeśli możesz, proponuję zdalnie korzystać z tych samych nazw oddziału lokalnie &. Następnie git push popchnie wszystkie twoje lokalne gałęzie do odpowiednich gałęzi w centralnym repozytorium.

Aby użyć różnych prefiksów w repozytoriach lokalnych i zdalnych, należy dodać odwzorowanie do pliku konfiguracyjnego przy każdym tworzeniu nowej gałęzi funkcji. Komenda skonfigurować odwzorowanie dla tematu/BRANCH_NAME jest

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

W sekcji [zdalny początek] dodaj jeden wiersz na mapowanie. W tym master do master.

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

Nie jestem pewien, jak to zrobić za pomocą polecenia git-config.

Należy pamiętać, że od tej pory wszystkie odgałęzienia są popychane w tym samym kierunku, gdy wykonywane jest proste naciśnięcie git (bez żadnych parametrów).

Czy chciałbyś wyjaśnić, dlaczego nie przechowujesz tych samych nazw oddziałów lokalnie i zdalnie?

+0

Dobra rada w utrzymywaniu dopasowanych gałęzi ... Mogę się do tego przyzwyczaić. Zamiast tego, czy możliwe jest dołączanie symboli wieloznacznych w mapowaniach typu "push", podobnie jak w przypadku standardowego pytania w pytaniu? –

1

Można mapować oddziału do innego oddziału śledzenia na pilocie z mniej więcej tak:

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

Twój config kończy się podobnie do tego, co @Paul sugeruje (odrobinę "prostsze" w rzeczywistości).

Zobacz sedno (z poprawkami przeze mnie) dotyczące kroków, które dobrze mi odpowiadają https://gist.github.com/2002048.