Jakie są różnice między oddziałami lokalnymi, oddziałami lokalnymi, oddziałami zdalnymi i oddziałami zdalnymi?

Właśnie zacząłem używać Gita i bardzo się pogubiłem między różnymi gałęziami. Czy ktoś może mi pomóc dowiedzieć się jakie są następujące rodzaje gałęzi?

  • oddziały lokalne
  • lokalne oddziały śledzenia
  • odległe gałęzie
  • Remote tracking branches

Jaka jest różnica między nimi? I jak ze sobą współpracują?

Szybki kod demo będzie naprawdę pomocny.

Author: Lii, 2013-05-07

3 answers

A lokalna gałąź jest gałęzią, którą tylko Ty (użytkownik lokalny) możesz zobaczyć. Istnieje tylko na komputerze lokalnym.

git branch myNewBranch        # Create local branch named "myNewBranch"

A Remote branch jest gałęzią w odległej lokalizacji (w większości przypadków origin). Możesz przesunąć nowo utworzoną gałąź lokalną myNewBranch do origin. Teraz inni użytkownicy mogą go śledzić.

git push -u origin myNewBranch   # Pushes your newly created local branch "myNewBranch"
                                 # to the remote "origin".
                                 # So now a new branch named "myNewBranch" is
                                 # created on the remote machine named "origin"

Zdalna gałąź śledzenia jest lokalną kopią zdalnej gałęzi. Gdy {[5] } jest wciśnięty do origin za pomocą powyższego polecenia, zdalna gałąź śledząca o nazwie origin/myNewBranch jest tworzony na Twojej maszynie. Ta zdalna gałąź śledzi zdalną gałąź myNewBranch na origin. Możesz zaktualizować swoją zdalną gałąź śledzenia, aby była zsynchronizowana z zdalną gałąź za pomocą git fetch lub git pull.

git pull origin myNewBranch      # Pulls new commits from branch "myNewBranch" 
                                 # on remote "origin" into remote tracking
                                 # branch on your machine "origin/myNewBranch".
                                 # Here "origin/myNewBranch" is your copy of
                                 # "myNewBranch" on "origin"

A lokalna gałąź śledzenia to lokalna gałąź śledzenia która śledzi inną gałąź. Jest to tak, że możesz wciskać / ciągnąć commity do / z innej gałęzi. Lokalne oddziały śledzenia w większości przypadków śledzą zdalną gałąź śledzenia. Kiedy ty po wciśnięciu lokalnej gałęzi do origin używając git push command z opcją -u (Jak pokazano powyżej), ustawiasz lokalną gałąź myNewBranch, aby śledzić zdalną gałąź śledzenia origin/myNewBranch. Jest to potrzebne, aby używać git push i git pull bez określania upstream do push to lub pull from.

git checkout myNewBranch      # Switch to myNewBranch
git pull                      # Updates remote tracking branch "origin/myNewBranch"
                              # to be in sync with the remote branch "myNewBranch"
                              # on "origin".
                              # Pulls these new commits from "origin/myNewBranch"
                              # to local branch "myNewBranch which you just switched to.
 79
Author: SNce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-02 16:39:37

Oto długa odpowiedź.

Piloty:

Jeśli używasz Gita wspólnie, prawdopodobnie będziesz musiał zsynchronizować swoje commity z innymi maszynami lub lokalizacjami. Każda maszyna lub lokalizacja jest nazywana remote, w terminologii Gita i każda z nich może mieć jedną lub więcej gałęzi. Najczęściej masz tylko jeden, o nazwie origin. Aby wyświetlić listę wszystkich pilotów, Uruchom git remote:

$ git remote
bitbucket
origin

Możesz zobaczyć, do których lokalizacji te nazwy zdalne są skrótami, uruchamiając git remote -v:

$ git remote -v
bitbucket [email protected]:flimm/example.git (fetch)
bitbucket [email protected]:flimm/example.git (push)
origin [email protected]:Flimm/example.git (fetch)
origin [email protected]:Flimm/example.git (push)

Każdy pilot ma katalog pod git/refs/remotes/:

$ ls -F .git/refs/remotes/
bitbucket/ origin/

Gałęzie na Twojej maszynie:

TLDR: na twojej lokalnej maszynie masz trzy rodzaje gałęzi: lokalne gałęzie bez śledzenia, lokalne gałęzie śledzenia i gałęzie zdalnego śledzenia. Na zdalnej maszynie masz tylko jeden rodzaj gałęzi.

1. Lokalne oddziały

Możesz wyświetlić listę wszystkich lokalnych oddziałów na swoim komputerze, uruchamiając git branch:

$ git branch
master
new-feature

Każdy oddział lokalny posiada plik pod .git/refs/heads/:

$ ls -F .git/refs/heads/
master new-feature

Istnieją dwa rodzaje lokalnych gałęzi na Twojej maszynie: nie-śledzenie lokalnych gałęzi i śledzenie lokalnych gałęzi.

1.1 nie-śledzenie lokalnych oddziałów

Oddziały lokalne nie są powiązane z żadną inną gałęzią. Tworzysz je uruchamiając git branch <branchname>.

1.2. Śledzenie lokalnych oddziałów

Lokalne gałęzie śledzące są powiązane z inną gałęzią, Zwykle gałęzią śledzącą zdalnie. Tworzysz je uruchamiając git branch --track <branchname> [<start-point>].

Możesz sprawdzić, która z lokalnych gałęzi śledzi gałęzie za pomocą git branch -vv:

$ git branch -vv
master      b31f87c85 [origin/master] Example commit message
new-feature b760e04ed Another example commit message

Z wyjścia tego polecenia widać, że lokalna gałąź master śledzi gałąź zdalnego śledzenia origin/master, a lokalna gałąź new-feature niczego nie śledzi.

Innym sposobem, aby zobaczyć, które gałęzie śledzą gałęzie, jest rzucenie okiem na .git/config.

Śledzenie lokalnych gałęzi jest przydatne. Pozwalają biegać git pull i git push, BEZ określanie, która gałąź upstream ma zostać użyta. Jeśli gałąź nie jest skonfigurowana do śledzenia innej gałęzi, pojawi się błąd podobny do tego:

$ git checkout new-feature
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

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

    git branch --set-upstream new-feature <remote>/<branch>

2. Zdalne śledzenie gałęzi (nadal na komputerze)

Możesz wyświetlić listę wszystkich gałęzi zdalnego śledzenia na swoim komputerze, uruchamiając git branch -r:
$ git branch -r
bitbucket/master
origin/master
origin/new-branch

Każda gałąź zdalnego śledzenia ma Plik pod .git/refs/<remote>/:

$ tree -F .git/refs/remotes/
.git/refs/remotes/
├── bitbucket/
│   └── master
└── origin/
    ├── master
    └── new-branch
Pomyśl o gałęziach zdalnego śledzenia, jak o lokalnej pamięci podręcznej dla tego, co zawierają zdalne maszyny. Ty może aktualizować swoje gałęzie zdalnego śledzenia za pomocą git fetch, który git pull używa za kulisami.

Pomimo tego, że wszystkie dane dla gałęzi zdalnego śledzenia są przechowywane lokalnie na twoim komputerze( jak pamięć podręczna), nigdy nie jest ona nazywana lokalną gałęzią. (Przynajmniej nie nazwałbym tego tak!) To po prostu gałąź zdalnego śledzenia.

Gałęzie na zdalnej maszynie:

Możesz wyświetlić wszystkie zdalne gałęzie (czyli gałęzie na zdalnej maszynie), uruchamiając git remote show <remote>:

$ git remote show origin
* remote origin
  Fetch URL: [email protected]:Flimm/example.git
  Push  URL: [email protected]:Flimm/example.git
  HEAD branch: master
  Remote branches:
    io-socket-ip            new (next fetch will store in remotes/origin)
    master                  tracked
    new-branch              tracked
  Local ref configured for 'git pull':
    master     merges with remote master
    new-branch merges with remote new-branch
  Local ref configured for 'git push':
    master     pushes to master     (up to date)
    new-branch pushes to new-branch (fast-forwardable)

To git remote polecenie wypytuje zdalną maszynę przez sieć o jej gałęzie. Nie aktualizuje gałęzi zdalnego śledzenia na komputerze lokalnym, użyj do tego git fetch lub git pull.

Na wyjściu możesz zobaczyć wszystkie gałęzie, które istnieją na zdalnej maszynie, patrząc pod nagłówkiem " zdalne gałęzie "(ignoruj linie oznaczone jako"stale").

Jeśli możesz zalogować się na zdalnej maszynie i znaleźć repozytorium w systemie plików, możesz spójrz na wszystkie jego gałęzie pod refs/heads/.

Ściągawka:

  • W 2008 roku firma została założona przez Marka T. A. R. T. R. z siedzibą w Nowym Jorku.]}
    git branch -d <branchname>
    
  • W 2007 roku, po raz pierwszy w Polsce, pojawiła się Wersja polska.]}
    git branch -D <branchname>
    
  • Aby usunąć gałąź zdalnego śledzenia:

    git branch -rd <remote>/<branchname>
    
  • Aby utworzyć nową lokalną gałąź bez śledzenia:]}
    git branch <branchname> [<start-point>]
    
  • Aby utworzyć nowe śledzenie lokalne branch: (zauważ, że jeśli <start-point> jest określona i jest gałęzią zdalnego śledzenia jak origin/foobar, to znacznik --track jest automatycznie dołączany)

    git branch --track <branchname> [<start-point]
    

    Przykład:

    git branch --track hello-kitty origin/hello-kitty
    
  • Aby usunąć gałąź na zdalnej maszynie:]}
    git push --delete <remote> <branchname>
    
  • [49]}aby usunąć wszystkie gałęzie zdalnego śledzenia, które są przestarzałe, to znaczy, że odpowiednie gałęzie na zdalnej maszynie już nie istnieją.]}
    git remote prune <remote>
    

Być może zauważyłeś, że w niektórych polecenia, używasz <remote>/<branch> i innych poleceń, <remote> <branch>. Przykłady: git branch origin/hello-kitty i git push --delete origin hello-kitty.

Może się to wydawać arbitralne, ale jest prosty sposób, aby zapamiętać, kiedy użyć ukośnika, a kiedy spacji. Kiedy używasz ukośnika, odnosisz się do zdalnego śledzenia gałęzi na własnym komputerze, podczas gdy Gdy używasz przestrzeni, masz do czynienia z gałęzią na zdalnym komputerze przez sieć.

 151
Author: Flimm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-30 16:43:32

Oddział Lokalny:

Gałąź na twoim komputerze, w której możesz pracować i dodawać commity. Możesz wymienić te gałęzie za pomocą git branch.

Oddział Lokalny (Ze Śledzeniem):

Zwykła lokalna gałąź skonfigurowana tak, aby odpowiadała zdalnej gałęzi. Ma to zalety takie jak możliwość git pull i git push bez konieczności podawania nazwy repozytorium i gałęzi. Śledzenie powoduje również, że git status informuje cię, kiedy Twój oddział jest przed lub za zdalnie.

Remote Branch:

Po prostu gałąź na zdalnym repozytorium-zazwyczaj na serwerze takim jak GitHub itp.

Zdalna Gałąź Śledzenia:

Lokalna kopia zdalnego oddziału. Ta gałąź nigdy nie powinna być edytowana. Jego celem jest śledzenie aktualnego stanu zdalnego oddziału. Gałęzie zdalnego śledzenia mogą być wyświetlane za pomocą git branch -r i zazwyczaj wyglądają jak origin/master (Nazwa repo, po której następuje Ukośnik i nazwa gałęzi). Uruchomienie git fetch zaktualizuje zdalne gałęzie śledzenia, aby odzwierciedlić stan odpowiednich gałęzi zdalnych.

git branch -avv jest moim osobistym faworytem do wyświetlania szybkiego przeglądu, które gałęzie są na moim komputerze, które gałęzie są na pilocie i najnowsze commit w każdym. Część -a określa, że wszystkie gałęzie powinny być pokazane (zdalne i lokalne). v na końcu oznacza verbose (pokazuje ostatni hash commit i wiadomość). Podziękowania dla @Flimm za zwrócenie uwagi, że second v dodaje informacje o tym, która lokalna gałąź śledzi który zdalny.

 11
Author: Eric Mathison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-22 02:04:10