2012-03-29 11 views
11

Nie mogę wymyślić, jak skłonić SourceTree do Gerrit.Prześlij do gerrit za pomocą SourceTree

Widziałem ten link, ale ja nadal nie rozumiem, jak można to zrobić: https://answers.atlassian.com/questions/29361/configuring-sourcetree-push-for-gerrit

Najwyraźniej zgodnie z informacjami o wydaniach 1.3.3 istnieje sposób, aby to zrobić, ale nie mogę zrozumieć to: http://www.sourcetreeapp.com/update/ReleaseNotes.html#version-1.3.3

Czy jest jakiś przewodnik krok po kroku, jak to zrobić?

Teraz mogę uruchomić to polecenie w terminalu wcisnąć

git push origin HEAD:refs/for/master 

Odpowiedz

27

Uważam, że odpowiedź udzielana przez Atlassian mówi, aby zmienić nazwę zdalnego oddziału, kiedy pojawi się okno dialogowe Push.

  1. Otwórz Push dialogowe
  2. Kliknij na zdalnym nazwy oddziału pod „oddział Remote” kolumny (kopalnia jest obecnie „mistrz”)
  3. Wpisz nową nazwę Remo branży - co byłoby „bibl/for/master "dla mnie
  4. Kliknij OK.

Wygląda na to, że właściwie popchnęło mnie do Gerrit. Problem, który mam teraz, polega na tym, że wartość "refs/for/master" nie istnieje. Teraz, żeby to zrozumieć. Zaktualizuję ten post, gdy już to wymyślę. Mam nadzieję, że to pomoże, nawet jeśli jest późno.

Aktualizacja: okazuje się, że musisz dodać wpis wypychania pod zdalnym początkiem w .git/config. Powinieneś to zrobić za pomocą polecenia git config (toteż ręcznie edytowałem plik i jestem pewien, że to zła praktyka). linia Push I napisał to:

push = refs/heads/*:refs/for/* 

dla jasności tutaj jest moje pochodzenie zdalnego wejścia w .git/config:

[remote "origin"] 
    url = ssh://gerrit-test.example.com:29418/mystuff.git 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    push = refs/heads/*:refs/for/* 

W SourceTree można teraz wcisnąć i będzie naciskać Gerrit zamiast ostateczne repozytorium. (możesz teraz po prostu zrobić git push bez określania czegokolwiek innego i będzie to push do gerrit). Zwróć uwagę, że po naciśnięciu SourceTree nadal będzie wyświetlać numer na przycisku Push, który mówi, że nadal masz rzeczy do przekazania. Dzieje się tak dlatego, że wciąż pobiera się z głównego repozytorium, a zmiany wprowadzone w gerrit nie zostały jeszcze połączone z głównym repo. Po scaleniu zmian w repozytorium głównym numer z przycisku zniknie.

+1

Udało mi się zmienić nazwę oddziału zdalnego, ale to nie pomogło, ponieważ używało wzorca dla lokalnego oddziału, a nie HEAD. Ale Twoje zaktualizowane komentarze pomogły, dodając linię "push" w mojej wersji .git/config. – JoseM

+7

Znów dzięki za dużo. Oto jak to zrobić za pomocą polecenia git config: 'git config remote.origin.push refs/heads/*: refs/for/*' – JoseM

+0

nice. znacznie lepiej dzięki właściwemu narzędziu wiersza poleceń. – mozart27

1

Jeśli masz konfigurację z Git Flow (http://nvie.com/posts/a-successful-git-branching-model/) lub podobnym, często chcesz przekazać swój lokalny oddział do innego oddziału zdalnego. W takim przypadku ogólna reguła wypychania (wspomniana przez mozart27) nie zadziała, ponieważ zawsze przesuwa lokalny oddział do odpowiedniej gałęzi zdalnej.

Przykład: Mam lokalny oddział "feature123", który jest gotowy do przeglądu (tj. Gerrit). Nasza gałąź integracyjna to "origin/develop". Jeśli użyję ogólnej reguły wypychania, to "feature123" zostanie popchnięte do sprawdzenia w "origin/feature123", ale to czego naprawdę chcę, to popchnąć ją do recenzji "origin/develop".

Rozwiązanie: W SourceTree można utworzyć niestandardową akcję:

Menu caption: Push for review 
Script to run: cmd 
Parameters: /c git push origin $SHA:refs/for/develop 

Pamiętaj, aby dodać Git na swojej drodze, aby umożliwić cmd, aby go używać.

Następnie, zamiast kliknąć "Push", kliknij prawym przyciskiem myszy zatwierdzenie i wybierz "Akcje niestandardowe -> Prześlij do sprawdzenia".

Oczywiście, że te 2 rozwiązania mogą współistnieć, mając ogólną regułę wypychania, zapewniającą, że zawsze wysyłane są do sprawdzenia podczas wysyłania do odległego oddziału, oraz niestandardową akcję, gdy chcesz wysłać oddział funkcji do przejrzenia w gałęzi integracji.