2013-04-11 7 views
6

Próbowałem uruchomić git p4 na repo, że pracuję jako tymczasowy pomost między git i perforce. Wiele osób korzysta z repozytorium jako pilota, a jego okresowe przesyłanie jest ponownie wykonywane.git p4 submit failed

Pracuje w większości dobrze, z wyjątkiem kilku zduplikowanych przymusów, których dziwaczne zachowanie nie może się powielać. Potem jeden dzień poza granice otrzymuję ten błąd. Nie mogę już naciskać żadnych poleceń git do zmylenia.

[email protected]:~/Source/code$ git p4 submit -M --export-labels 
Perforce checkout for depot path //depot/perforce/workspace/ located at /home/user/Source/git-p4-area/perforce/workspace/ 
Synchronizing p4 checkout... 
... - file(s) up-to-date. 
Applying ffa390f comments in config xml files 
//depot/perforce/workspace/sub/folder/structure/first.xml#3 - opened for edit 
//depot/perforce/workspace/sub/folder/structure/second.xml#3 - opened for edit 
//depot/perforce/workspace/sub/folder/structure/third.xml#3 - opened for edit 
//depot/perforce/workspace/sub/folder/structure/forth.xml#3 - opened for edit 
//depot/perforce/workspace/sub/folder/structure/fifth.xml#1 - opened for edit 
error: patch failed: sub/folder/structure/first.xml:1 
error: sub/folder/structure/first.xml: patch does not apply 
error: patch failed: sub/folder/structure/second.xml:1 
error: sub/folder/structure/second.xml: patch does not apply 
error: patch failed: sub/folder/structure/third.xml:1 
error: sub/folder/structure/third.xml: patch does not apply 
error: patch failed: sub/folder/structure/forth.xml:1 
error: sub/folder/structure/forth.xml: patch does not apply 
error: patch failed: sub/folder/structure/fifth.xml:1 
error: sub/folder/structure/fifth.xml: patch does not apply 
Unfortunately applying the change failed! 
//depot/perforce/workspace/sub/folder/structure/first.xml#1 - was edit, reverted 
//depot/perforce/workspace/sub/folder/structure/second.xml#3 - was edit, reverted 
//depot/perforce/workspace/sub/folder/structure/third.xml#3 - was edit, reverted 
//depot/perforce/workspace/sub/folder/structure/forth.xml#3 - was edit, reverted 
//depot/perforce/workspace/sub/folder/structure/fifth.xml#3 - was edit, reverted 
No commits applied. 

Błąd ten wygląda trochę jak ten błąd:

git-p4 submit fails with patch does not apply

chyba nie robię żadnej zmiany słów kluczowych, więc nie mam pojęcia, co to może być. dodanie --verbose nie wydaje się pomóc wyjaśnić wiele (nie mam tego wyjścia polecenia pod ręką)

Jedyna zmiana jaką mogłem sobie wyobrazić, to że dodałem plik .gitattributes z poniższą zawartością poniżej w momencie, kiedy popełnił commit. Jednakże, dopuszcza się przed tym popełnić natomiast gitattributes plik był w miejscu nie działa, więc to nie może być tak, że (mam od sprawiło, że .gitattributes złożyć bardziej szczegółowe)

* text eol=lf 

Próbowałem Cofanie zobowiązuje się w tym zdalnym repo na chwilę przed tym szkodliwym zatwierdzeniem, a następnie odsyła je z mojego repo na to zdalne repozytorium, a następnie ponownie przesyła. To samo zachowanie. Próbowałem wycofywać i wprowadzać różne zmiany do tego samego pliku, powtarzając, przesyłając ponownie. To samo zachowanie. I wydaje się, że dzieje się tak tylko z tymi plikami. Od przywrócenia starałem się wprowadzać zmiany do innych plików i działają. Próbowałem uruchomić dos2unix, aby wymusić zakończenie linii unixowych na plikach naruszających, i to też nie naprawiło.

Jakie polecenie może dać mi lepsze wyjaśnienie tego, co się tutaj dzieje? Czy istnieje plik dziennika git, który mogłem ogonem? Każda pomoc będzie doceniona.

Edycja: Ponownie przetestowałem mój problem zi bez pliku .gitattributes. to nie miało znaczenia. obecnie wprowadzane jest moje globalne ustawienie core.autocrlf. Ale z brakującym plikiem .gitattributes, który wydawał się nie mieć znaczenia. Oto, jak to wyglądało, gdy przetestowałem go za pomocą jednego z niepoprawnych plików z włączoną --verbose.

[email protected]:/code$ git p4 submit -M --export-labels --verbose 
Reading pipe: git name-rev HEAD 
Reading pipe: ['git', 'config', 'git-p4.allowSubmit'] 
Reading pipe: git rev-parse --symbolic --remotes 
Reading pipe: git rev-parse p4/master 
Reading pipe: git cat-file commit 0457c7589ea679dcc0c9114b34f8f30bc2ee08cf 
Reading pipe: git cat-file commit HEAD~0 
Reading pipe: git cat-file commit HEAD~1 
Reading pipe: ['git', 'config', 'git-p4.conflict'] 
Origin branch is remotes/p4/master 
Reading pipe: ['git', 'config', '--bool', 'git-p4.useclientspec'] 
Opening pipe: ['p4', '-G', 'where', '//depot/perforce/workspace/...'] 
Perforce checkout for depot path //depot/perforce/workspace/ located at /home/user/Source/git-p4-area/perforce/workspace/ 
Synchronizing p4 checkout... 
... - file(s) up-to-date. 
Opening pipe: p4 -G opened ... 
Reading pipe: ['git', 'rev-list', '--no-merges', 'remotes/p4/master..master'] 
Reading pipe: ['git', 'config', '--bool', 'git-p4.skipUserNameCheck'] 
Reading pipe: ['git', 'config', 'git-p4.detectCopies'] 
Reading pipe: ['git', 'config', '--bool', 'git-p4.detectCopiesHarder'] 
Reading pipe: ['git', 'show', '-s', '--format=format:%h %s', 'ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e'] 
Applying ef3b95f making test change 
Opening pipe: p4 -G users 
Reading pipe: ['git', 'log', '--max-count=1', '--format=%ae', 'ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e'] 
Reading pipe: git diff-tree -r -M "ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e^" "ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e" 
//depot/perforce/workspace/sub/folder/structure/first.xml#3 - opened for edit 
<stdin>:17: trailing whitespace. 
<!-- comment line 1 --> 
<stdin>:18: trailing whitespace. 
<!-- comment line 2 --> 
<stdin>:19: trailing whitespace. 
<!-- comment line 3 --> 
error: patch failed: sub/folder/structure/first.xml:1 
error: sub/folder/structure/first.xml: patch does not apply 
Unfortunately applying the change failed! 
Reading pipe: ['git', 'config', '--bool', 'git-p4.attemptRCSCleanup'] 
//depot/perforce/workspace/sub/folder/structure/first.xml#3 - was edit, reverted 
No commits applied. 
Reading pipe: ['git', 'config', '--bool', 'git-p4.exportLabels'] 
Opening pipe: ['p4', '-G', 'labels', '//depot/ipstor.maple/automation/...'] 
Reading pipe: ['git', 'tag'] 
Reading pipe: ['git', 'config', 'git-p4.labelExportRegexp'] 
+0

Zgaduję, że 'git diff-tree -r -M" ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e^"" ef3b95f5fec193fe2612b28e2e3b5e7f8ba9419e "' i sprawdź, czy możesz zastosować poprawki ręcznie? –

Odpowiedz

2

Wymyśliłem to. Problem jest spowodowany przez zakończenia linii. Powtórzyłem problem z innym plikiem, w tym przypadku błąd jest spowodowany przez końcówki linii pliku wyewidencjonowanego w obszarze roboczym perforce będącym crlf w stylu win, a zakończenia linii pliku w repozytorium git są stylem unixowym lf.

W tym przypadku sprawdziłem plik w perforce, uruchomiłem dos2unix przeciwko niemu, i przesłałem to, a następnie uruchomiłem git p4 i działało.

To nie jest prawdziwe rozwiązanie. To tylko obejście. Wysłałem e-mail na listę mailową git, prosząc o poprawkę. http://marc.info/?l=git&m=136630231402536&w=2

2

Dla mnie przesyłanie działało po ustawieniu git config apply.ignorewhitespace change.

Myślę, że błąd występuje, ponieważ git core.whitespace ustawienie jest restrykcyjna domyślnie:

The ones that are turned on by default are blank-at-eol, which looks for spaces at the end of a line; blank-at-eof, which notices blank lines at the end of a file; and space-before-tab, which looks for spaces before tabs at the beginning of a line.

(patrz http://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration)

Ustawianie apply.ignorewhitespace change pozwala git apply naprawić te błędy. Zmiana ustawienia core.whitespace na mniej restrykcyjną powinna również rozwiązać problem, ale nie próbowałem tego.

+0

dziękuję, twoje rozwiązanie zadziałało dla mnie! – beshanoe