2009-08-27 3 views
5

Piszę pre-commit hook i chciałbym sprawdzić całą zawartość każdego pliku, który ma zostać zatwierdzony (w szczególności sprawdzanie lint na akta). Chcę lint sprawdzić plik, ponieważ zostanie on zatwierdzony, a nie taki, jaki istnieje w moim drzewie roboczym (co może się różnić).Pokaż kompletne pliki, które mogłyby istnieć w indeksie git

Przykład haka poprzedzającego zatwierdzenie dostarczany z git pokazuje, jak uzyskać różnicę (aby można było sprawdzić, czy istnieją spacje itp.), Ale muszę pobrać cały plik, ponieważ zostanie zatwierdzony.

Odpowiedz

9

Spróbuj tego:

git --work-tree=/path/to/checkout-area checkout-index path/to/file-to-checkout 

Opcja --work-tree mówi git użyć innego obszaru jako drzewa pracy, tak, aby nie nadpisać plik w prawdziwe dzieło drzewa. Możesz również dodać opcję -f, aby poinformować o konieczności jej zastąpienia, jeśli to konieczne, ale jeśli skrypt prawidłowo czyści po sobie, nie powinno to być konieczne. Aby uzyskać więcej informacji, patrz man page for checkout-index.

+0

Tak, checkout-index był tylko podpowiedzią, że muszę znaleźć to, czego potrzebuję znaleźć. Dzięki! –

6

Innym rozwiązaniem dla pojedynczego pliku jest (zakładając, że nie jesteś w trakcie skonfliktowanego scalenia lub rebase):

$ git show :0:path/to/file 

(gdzie path/to/file jest w stosunku do górnej katalogu w repozytorium).

Lub "git cat-file blob :0:path/to/file", który (jak sądzę) nie wywoływałby żadnych filtrów (rozszerzenie słów kluczowych, konwersja końca wiersza itp.).

Patrz rozdział o przedłużony sha-1 składni w git-rev-parse podręcznika


1.) zaletą jest to, że za pomocą Jefromi's answergit checkout-index można kasie więcej niż jeden plik; możesz wyewidencjonować cały katalog, a nawet cały projekt.

+0

To jest całkiem niesamowite, ale znajdę wymówkę, by z niego skorzystać. – Cascabel