Pobieranie istniejących gałęzi git do śledzenia oddziałów zdalnych

81

Mój typowy przepływ pracy podczas pracy z gitem wygląda mniej więcej tak:

  1. utwórz lokalne repozytorium
  2. wykonaj jakąś pracę w tym repozytorium, dodaj / zmień pliki itp.
  3. zdecyduj, że chcę mieć centralną, zdalną lokalizację dla repozytorium i utwórz ją
  4. wypchnij wszystkie zatwierdzenia z mojego lokalnego repozytorium do tego nowego zdalnego repozytorium

Teraz jednak chcę mieć możliwość przechodzenia do pushiz pulltego zdalnego repozytorium bez konieczności określania, gdzie wypycham lub skąd wyciągam; Chcę, aby mój lokalny mistrz śledził zdalnego mistrza.

Właściwy sposób to zrobić, nie jest jasne dla mnie, a ja byłem w stanie określić go z dokumentacji, mimo że naprawdę nie powinno być więcej niż jedno polecenie.

Ponieważ jest to coś, co robi się tylko raz na repozytorium, ogólnie zastosowałem jedno z dwóch prostych, ale hackerskich rozwiązań:

  1. używany git clonedo tworzenia nowego lokalnego repozytorium i usuwał stare. Po sklonowaniu git, nowe repozytorium jest skonfigurowane do śledzenia pochodzenia.
  2. ręcznie edytowane .git / config, aby utworzyć początek ścieżki głównej.

Myślę, że powinienem być w stanie uruchomić polecenie, prawdopodobnie jakąś formę git remoteskonfigurowania istniejącego repozytorium tak, aby ścieżka główna była zdalna. Czy ktoś może mi powiedzieć, co to za polecenie?

SpoonMeiser
źródło
Właściwie okazuje się, że podobne pytanie zostało już zadane
SpoonMeiser
Dla wersji gita> = 1.7.0.0 możesz to zrobić jednym poleceniem, wyjaśniono to tutaj .
KiRPiCH
4
W rzeczywistości jest to duplikat: stackoverflow.com/questions/520650/ ...
takeshin

Odpowiedzi:

156

Użyj argumentu set upstream:

git branch --set-upstream local-branch-name origin/remote-branch-name

Uruchomienie powyższego polecenia aktualizuje poprawnie plik .git / config, a nawet weryfikuje z tym wyjściem:

„Nazwa oddziału lokalnego-oddziału skonfigurowana do śledzenia zdalnego oddziału nazwa-oddziału-zdalnego z miejsca pochodzenia.”

EDYCJA: Jak powiedział Martijn : "W wersji Git v1.8.0 --set-upstream jest przestarzałe. Zamiast tego użyj --set-upstream-to."

git branch --set-upstream-to local-branch-name origin/remote-branch-name

Zobacz to, aby uzyskać więcej informacji.

Jorge
źródło
18
W wersji Git v1.8.0 --set-upstreamjest przestarzały. Użyj --set-upstream-tozamiast tego.
Martijn,
1
Użyj, git remote show <remote>aby zobaczyć, które oddziały są śledzone przez twoje lokalne oddziały
naitsirch
1
Ta sugerowana zmiana nie powinna była zostać zatwierdzona, zasadniczo zmieniła odpowiedź (i pozostawiła ją w nieprawidłowym stanie, ponieważ argumenty nowej opcji są odwrócone). Niech oryginalny plakat zdecyduje, czy chce zaktualizować swoją odpowiedź.
1
Możesz także ponownie przesunąć gałąź za pomocągit push -u
mattr-
Czy nie set upstreamkonfiguruje mapowań bez faktycznego przekazania kodu? push wymusza wypchnięcie kodu w celu utworzenia mapowań. Może nie masz jeszcze kodu, ale chcesz utworzyć mapowanie?
user20358
19

git help remotepowinien pokazać ci to, co powinieneś wiedzieć. Myślę, że chcesz

git remote add [remote-name] [remote-url]

# Set a local branch to follow the remote
git config branch.[branch-name].remote [remote-name]

# Set it to automatically merge with a specific remote branch when you pull
git config branch.[branch-name].merge [remote-master]

Możesz także ręcznie edytować .git / config, aby je skonfigurować.

Mike Pape
źródło
Inną opcją jest utworzenie centralnego repozytorium, a następnie usunięcie katalogu roboczego i ponowne utworzenie go przez klonowanie z centralnego repozytorium. Edycja .git / config będzie jednak bardziej pouczająca.
William Pursell
klonowanie centralnego repozytorium i edycja .git / config to dwie opcje, o których wspomniałem już w moim pytaniu.
SpoonMeiser
8

Możesz również użyć tego, jeśli chcesz utworzyć nowy oddział lokalny do śledzenia zdalnego oddziału:

git checkout --track -b [branch_name] --track origin[or other remote name]/[remote_branch_name] 

lub nawet lepiej:

git checkout -t origin/branch_name
bcolfer
źródło
git checkout --track -b nazwa gałęzi nazwa_gałęzi pochodzenie krytyczna: git checkout: aktualizowanie ścieżek jest niezgodne z przełączaniem gałęzi. Czy zamierzałeś wyewidencjonować „pochodzenie / nazwa gałęzi”, których nie można rozpoznać jako zatwierdzenia?
edebill
6

W nowszych wersjach git możesz użyć

git branch --track origin/branch_name
fazineroso
źródło
4
Ten post jest automatycznie oznaczany jako niskiej jakości, ponieważ jest tak krótki / tylko kod. Czy możesz go rozszerzyć, dodając trochę tekstu wyjaśniającego, jak rozwiązuje problem?
gung - Przywróć Monikę
To jest najdokładniejsza odpowiedź! Wszystkie powyższe nie są nieprawidłowe lub nie są już obsługiwanegit branch --set-upstream BRANCH fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
GTodorov
3

The --set-upstream flag is deprecated and will be removed.

git branch master --set-upstream-to myupstream/master

Denis C.
źródło
1

Szybko do przodu trzy lata (zobacz, co tam zrobiłem :-)), próbowałem wyciągnąć nieśledzoną gałąź za pomocą Git Bash i otrzymałem

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> develop

Następujące rzeczy osiągnęły to, czego potrzebowałem:

$ git branch --set-upstream-to=origin/develop develop Branch 'develop' set up to track remote branch 'develop' from 'origin'.

MikeA
źródło
-1

Użyj tego polecenia:

git clone [<options>] [--] <repo> [<dir>]
RidhaHleli
źródło
Cześć, możesz chcieć ponownie przeczytać pytanie - wspomina o ponownym klonowaniu repozytorium, ale pytanie dotyczy tego, kiedy repozytorium lokalne zostało utworzone jako pierwsze i początkowo nie śledziło zdalnego.
SpoonMeiser