2009-10-23 8 views
32

Mam odwrotny problem z "How do I make Git ignore file mode (chmod) changes?" Mam plik, na który zmieniono uprawnienia do wykonywania, ale są też pewne zmiany tekstu i chcę je zatwierdzić, ale nie drugie. . Czy to jest możliwe z git?Jak dokonać zmiany trybu akceptowania git bez akceptowania wszystkich zmian tekstu?

(Faktycznie, zrobiłem kilka zmian tekstowych chcę popełnić wraz z wykonywalnego zmiany pozwolenia, a inne nie chcę popełnić)

Aktualizacja: Unstaging te zmiany tekstu do plik, a następnie ponownie wykonując i ponownie wprowadzając niektóre zmiany tekstu, aby zmienić tryb na w etapowanie. (Moja wersja git to 1.5.4.3)

Odpowiedz

15

git add -i pozwoli Ci selektywnie dodać kilka porcji z pliku do indeksu. Nie wiem, czy jest on wrażliwy na uprawnienia, ale jeśli dodamy przystawkę po operacji chmod, może on poprawnie znaleźć się w indeksie nawet bez jawnego aktualizowania uprawnień.

+4

Zgadza się, git dodać -I (i git dodać --patch) poprosi "zmiana trybu scenie?" tuż przed tym, jak zapytają o zmienione kawałki. – Phil

+0

Dzięki Phil. Zdolność ta wydaje się być związana z git 1.5.6 zgodnie z notatkami do wydania. (Niestety, mój git nie jest taki nowy) –

74

Powinieneś być w stanie to zrobić:

git update-index --chmod=(+|-)x <file> 

dostosować bit wykonywalny przechowywany w indeksie.

Możesz następnie zatwierdzić to niezależnie od zmian w zawartości plików.

+0

** Uwaga: ** użyj "git commit" (z "git add" jeśli to konieczne, nie "git commit-a".) To rozwiązanie ma tę zaletę, że działa nawet ze starszym git. –

+1

Działa również na systemach plików z kiepską obsługą uprawnień! Nawet Windows! – remram

+0

To rozwiązanie jest o wiele lepsze, @Andrew Grimm. Zaakceptuj tę odpowiedź, proszę. – lmaooooo

3

Charles’ answer Dodałem zarówno tryb pliku, jak i zmiany zawartości do indeksu dla mnie. Pracowałem nad tym w ten sposób.

git update-index --skip-worktree --chmod=+x <file> 
git update-index --no-skip-worktree <file> 

Example

Alternatywnie można zrobić

git update-index --chmod=+x <file> 
git config interactive.singlekey 1 
echo na | git reset -p 
Powiązane problemy