2012-12-11 11 views
7

Robię repozytorium git i utknąłem, ponieważ w jednym zatwierdzeniu mam folder o nazwie Proto, ale w innym zatwierdzeniu mam folder o nazwie proto. To był szczery błąd i powinien być Proto w obu przypadkach. Najlepsze, co mogę tu wymyślić, to spróbować usunąć folder z obu zatwierdzeń, a następnie spróbować ponownie bazy danych, ale musi istnieć lepszy sposób.Jak rozwiązać konflikt dużych liter w folderze z Git w systemie Windows?

W przeszłości, gdy napotykałem problemy z używaniem wielkich liter, użyłem git mv, ale z folderem nie pozwala mi uruchomić git mv, i nie wiem dlaczego.

Jaki jest poprawny sposób naprawienia problemu z wielką literą w git w systemie Windows?

Odpowiedz

1

Przemycanie nazw folderów do historii Git jest trudne, ponieważ foldery nie są śledzone - tylko pliki w folderach. Zakładając, że chcesz zmienić nazwę oldFolder do oldfolder można spróbować wykonać następujące czynności:

  1. rebase interaktywnie od punktu, w którym po raz pierwszy utworzony plik w oldFolder. Edytuj każde zatwierdzenie, które dodaje pliki do tego folderu. Kiedy interakcyjny rebase zatrzyma się, stwórz newFolder i wykonaj git mv oldFolder/* newFolder/. Zrób to drugie dla każdego zatrzymania interaktywnego rebase.

  2. Oczywiście nie można mieć oldFolder i newFolder dwóch różnie napisanych wersjami tego samego słowa w systemie Windows. Dlatego powtórz krok 1, aby zmienić nazwę na newFolder na oldfolder.

+0

Dzięki za pomoc, okazało się, że musiałem wrócić i usunąć folder z jednego oddziału, wykonać rebase, a następnie ręcznie dodać pliki z powrotem w bazie. –

0

[edited] Podejrzewam trzeba „git mv” każdy plik w folderze z nazwą temp jak „protoks”, a następnie „git mv” pliki tymczasowe nazwie na „Proto”, jak Git nie śledzi folderów samodzielnie - tylko pliki w folderach.

Podwójny "git mv" działa w systemach plików niewrażliwych na wielkość liter Windows. (Powinieneś być w stanie przejść bezpośrednio z "proto" do "Proto" w systemach plików wrażliwych na wielkość liter, takich jak Linux.)

8

Napotkaliśmy podobny problem w naszym repozytorium git w systemie Windows, gdy duża liczba plików została przeniesiona do różnych katalogów.

Naprawiłem nasz problem po raz pierwszy ręcznie, klonując repozytorium do maszyny wirtualnej Linux i uruchamiając skrypt bash z poleceniami git mv, aby naprawić problem ze ścieżką plików. To był bolesny proces, więc postanowiłem opracować narzędzie, które automatyzuje proces. Jest to aplikacja konsoli .NET napisana przy użyciu biblioteki . Program identyfikuje wszystkie wpisy indeksu git z przypadkiem ścieżki pliku różniącym się od tego, co raportuje system plików Windows.

napisałem komentarz na blogu szczegółowo narzędzia, sposobu użytkowania i historię za nim w Git Unite - Fix Case Sensitive File Paths on Windows

+1

Dziękuję bardzo za to narzędzie! Zaoszczędziło nam to kilka godzin ręcznego naprawiania naszego niechlujnego repozytorium. –

+0

Wielkie dzięki.To było dla nas bardzo pomocne! Jest efektywny i prosty w użyciu –

Powiązane problemy