2013-02-18 14 views
6

Użyłem Mercurial wcześniej, ale planuję przejść na Git w najbliższej przyszłości.Czy muszę "git dodawać" plik za każdym razem, gdy zostanie zatwierdzony?

Wszystkie tutoriale, które widziałem, które wyjaśniają, jak działa Git, pokazują, że pliki są dodawane do sceny ("git add") przed każdym zatwierdzeniem, niezależnie od tego, czy były wcześniej śledzone.

Mercurial ma również polecenie, które działa w podobny sposób ("hg add"), ale z tego, co pamiętam, wystarczy raz "dodać". Na przykład, kroki do nowego repozytorium wyglądać następująco:

hg init 
hg add . 
hg commit "Initial commit" 
hg push 

Czy to możliwe z Git przepływu pracy, a jeśli tak nie jest, co jest powodem, dla powtórnej „git add”? Po prostu wydaje się niepotrzebne.

+0

Zauważ, że 'git add' niekoniecznie dodaje plik, dodaje nową * treść *, której nie ma w ostatnim zatwierdzeniu. W przypadku nowego pliku plik jest niejawnie pusty w najnowszym zatwierdzeniu. – chepner

+0

Użycie 'git add' przenosi pliki z katalogu roboczego do indeksu pomostowego, niezależnie od tego, czy jest to nowy plik czy zmodyfikowany plik. – tw1742

Odpowiedz

3

Tak, można zastosować ten sam ogólny przepływ pracy, ale polecenie "dodaj" można również zastosować bardziej selektywnie, dodając do każdego zatwierdzenia tylko określone pliki lub tylko określone fragmenty plików. Dzięki temu łatwiej jest oddzielić logicznie różne łaty na różne zatwierdzenia, co ułatwia śledzenie i udostępnianie innym.

Ale tak, możesz po prostu "dodać git". i wszystko przejdzie do obszaru przemieszczania dla zatwierdzenia. Jak wspomniano w innej odpowiedzi, "git commit -a" jest częściowym skrótem (nie doda nowych plików, ale będzie zatwierdzać wszystkie zmiany/usuwa do już zapisanych plików). Spróbuj "git status", aby zobaczyć, co zostanie uwzględnione w następnym zatwierdzeniu, a co nie.

UPDATE I należy również pamiętać, że uzupełnieniem git add to „git resetowania HEAD”, który usuwa plik z obszaru pomostowego na następne popełnić. Jeśli chcesz rozdzielić edycje w jednym pliku na wiele zmian, użyj opcji "-p", aby zarówno git add, jak i git zresetować, aby interaktywnie przejść przez plik i wybrać porcje do dodania/zresetowania.

+0

Tak właśnie się domyślałem, ale dokumentacja i widzenie ludzi faktycznie używających Gita nie czyni tego punktu tak jednoznacznie, jak prawdopodobnie powinno być. Osobiście częściej podejmuję się często, gdy skończę pracę nad poszczególnymi zadaniami lub funkcjami. Widząc, że Fog Creek uczy DVCS, jasne jest, że ponieważ masz kompletną kopię kodu, "commit" jest względnie bezpieczną operacją, ponieważ dotyczy tylko ciebie. Tak długo, jak długo pamiętasz o tym, jak i kiedy docierasz do centralnego repo, zwykle po prostu działa. – Chris

+0

Używanie 'git checkout nazwa_pliku' zamiast' git reset HEAD' pozwala ci wybrać bardziej selektywne powracania. – domih

7

Dwustopniowy proces w git jest bardzo potężny. Szczególnie podczas edycji kodu źródłowego często wprowadza się kilka równoległych zmian, które nie są bezpośrednio związane.

Za pomocą obszaru przemieszczania można wybrać pliki, które mają zostać zatwierdzone, a tym samym utworzyć jedno zatwierdzenie na każdą zmianę logiczną.

Jeśli chcesz zatwierdzić wszystkie pliki zmian jednocześnie, możesz użyć skrótu git commit -a.
Powoduje przejście wszystkich zmienionych i usuniętych plików i zatwierdzenie ich.
Uwaga: Nie powoduje automatycznego dodania nieśledzonych plików. Nadal musisz to zrobić wcześniej.

+0

Tak. Jak @dpkp powiedział, że ten sam przepływ pracy powinien działać bez problemu. Mam tendencję do pracy w "trybach" i nie robie tyle pracy nad plikami równolegle, ale widzę, jak to by się przydało. – Chris

1

Ponieważ nie zawsze chcesz zatwierdzić wszystkie zmienione pliki, możesz (i TY POWINIEN wybrać), które z nich chcesz zatwierdzić. W zależności od łuku projektu, z którym pracujesz, czasami wprowadzasz dodatkowe zmiany do testowania lub coś takiego, a niekoniecznie do produkcji.

+0

Program OP specjalnie pyta o zmienione pliki. –

+0

Dzięki, wydaje mi się, że źle zrozumiałem to pytanie, teraz edytując je. – martriay

+0

To prawda, chociaż jestem bardziej prawdopodobne, że utworzę oddzielne gałęzie, aby obsłużyć te przypadki, w których nie chcę jeszcze umieszczać konkretnej funkcji w centralnym repo. Po prostu tak, jak pracuję. – Chris

1

Kolejny skrót, o którym należy tutaj wspomnieć, to niezupełnie ciężki młotek git add . to git add -u. Różnica polega na tym, że te pierwsze będą przesuwać dowolne nowo dodane pliki, które nie są jawnie ignorowane (tj. Wszystkie "nieśledzone pliki" wymienione na wyjściu git status), podczas gdy te ostatnie będą tylko wprowadzać zmodyfikowane pliki, które już były śledzone.

Powiązane problemy