2012-11-18 11 views
27

Poszukuję sposobu na "ukrywanie" drobnych zmian wprowadzonych do kilku plików w Git, tak aby nie wyświetlały się w statusie git, dopóki nie zostaną wprowadzone inne zmiany akta.Git - Tymczasowo zignoruj ​​banalne zmiany w plikach

Przykład: Mam plik Java, w którym jedyną zmianą jest usunięcie nieużywanego importu (uczestnik zapomniał uruchomić organizację importu przed zatwierdzeniem). Teraz usunąłem ten import, a zmiana (oczywiście) pojawia się w git. Ponieważ nie mam żadnych innych zmian w tym pliku, nie bardzo lubię akceptować plik jako część innej (niepowiązanej) zmiany lub zatwierdzić tę zmianę jako samodzielną. Oczywiście, mógłbym cofnąć zmianę i zastosować ją tylko wtedy, gdy będę musiał dokonać zmian w tym pliku, ale mogę "ryzykować" zapomnienie o tym.

Czy istnieje polecenie wykonania takiego zadania? To działałoby trochę jak polecenie niezmienione, ale w nietrwały sposób.

Jaki byłby właściwy sposób rozwiązania tego problemu, jeśli takie polecenie nie jest dostępne?

Z góry dziękuję.

+1

Dlaczego nie można po prostu stworzyć "trywialne" oddział poprawki do tego? – Mat

+0

@ Co zysk z takiego oddziału? Nadal musiałbym połączyć go w mistrza, by nie pojawiały się trywialne zmiany. – Zelgadis

+0

Zachowałbyś tam wszystkie trywialne zmiany i scalał je, gdy wszystko jest w porządku w twoim cyklu deweloperskim. W ten sposób nie ingerują w "właściwe" zobowiązania, ale też nie są zapomniane. – Mat

Odpowiedz

36

W moim przypadku użycia (rozwój z wykorzystaniem zmodyfikowanego pliku konfiguracyjnego na moim osobistym komputerze, działa na innym komputerze z niezmienionym config), było to rozwiązanie dla mnie:

początek ignorowanie zmian w pliku:

git update-index --assume-unchanged path/to/file 

keep śledzenia ponownie:

git update-index --no-assume-unchanged path/to/file 
+2

Hah, dziękuję za przykład kopiowania i wklejania. Ciągle zapominam o ich składni z powodu rzadkiego używania tego: p –

+0

Jest to najlepsze rozwiązanie. Pierwotnie opublikowano 18 lutego 2009 r., Źródło: http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html –

1

Istnieje wiele sposobów [chociaż nie może być czysty i schludny i wymagałoby uwagę]

  1. Dodaj plik w trosce o .gitignore w repo tak, że nie pojawi się na popełnić. Zachowaj ostrożność, usuwając go z .gitignore, gdy jesteś gotowy do zatwierdzenia pliku
  2. Upewnij się, że nie "przesuwasz" pliku, wykonując resztę zmian. Możesz napisać opakowanie ponad git, które zapewni, że komendy takie jak git commit -a lub git add . będą działać na wszystkich oprócz pliku pod pytaniem. Inną alternatywą byłoby użycie git gui lub git citool, gdzie można wizualnie upewnić się, że plik nie znajduje się w obszarze "wystawionym", a tym samym nigdy nie zostanie zatwierdzony.
  3. Innym sposobem jest zatwierdzenie wszystkich wprowadzanych zmian, a następnie git stash save plik. Później, gdy będziesz gotowy do zmiany pliku, możesz git stash pop kontynuować pracę i zatwierdzanie.

nadzieję, że pomoże :)

+1

Pierwsze rozwiązanie niestety nie działa, ponieważ pliki są już śledzone. Mieszanka 2 i 3 jest tym, czego używam teraz, ale chciałbym czegoś bardziej automatycznego. Dzięki za odpowiedź! – Zelgadis

+0

Niestety, 'git' nie może jeszcze odczytać umysłu deweloperów, aby dowiedzieć się, czy zmiana jest ważna (i powinna być zatwierdzona), czy nie (nie utrzymuj tego). Najczystsze opcje to (a) oddzielna gałąź dla "drobnych poprawek", regularnie rekonstruowana i scalana w niektórych punktach; (b) zaznacz zmiany jako "trywialne" w komunikacie zatwierdzenia. IMHO (b) jest preferowany, ponieważ unika skosów i wersji, których nikt nigdy nie testował. – vonbrand

3

Miej zmiany, które nie są gotowe w oddzielnej gałęzi. git rebase ten oddział na szczycie nowych zmian w historii głównej, jeśli to konieczne.

Czy to rozwój w toku, rzeczy tymczasowe, a nawet rzeczy, których nigdy nie należy uwzględniać w historii głównego projektu - ten sam proces działa równie dobrze.

Jeśli/kiedy zmiany oddziału są gotowe do włączenia do historii głównej; scal go. Jeśli nie, przechowuj je w oddzielnym oddziale i kontynuuj przesuwanie.

(dygresja: git merge --no-ff mogą być stosowane do tworzenia scalanie-popełnić nawet jeśli szybko naprzód seryjnej jest możliwe - w zależności od zasad swojego projektu, może to być korzystne)

+0

To właśnie znalazłem rozwiązanie, które działa najlepiej dla mnie. Dzięki! – Zelgadis

+0

Nie ma za co! Cieszę się, że mogłem pomóc. – jsageryd

1

Tylko don” t dodaj proste zmiany.

Dobrze jest dokładnie przejrzeć rzeczy, które dodasz przed popełnieniem.

Można nawet ignorować pewne zmiany w pliku podczas dodawania innych, używając

git add -p. 

To jest nawet łatwiejsze, jeśli używasz gitx (R).

Powiązane problemy