2010-09-02 11 views
20

Jeśli zrobić to w jednym z moich repozytoria:git subtree pull mówi, że drzewo robocze ma modyfikacje, ale status git mówi, że tak nie jest. Co daje?

git subtree pull --prefix=frameworks/AquaticPrime --squash AquaticPrime 

uzyskać to:

Working tree has modifications. Cannot add. 

Jeśli mogę to zrobić (w tym samym miejscu, oczywiście):

git status 

Otrzymuję:

# On branch master 
nothing to commit (working directory clean) 

Nie jestem do końca pewien, co tu się dzieje. Polecenie status git sugeruje, że nie mam modyfikacji, więc zakładam, że pull pod drzewem git odnosi się do modyfikacji w innej gałęzi związanej z poddrzewem, ale nie jest to całkowicie jasne.

Czy ktoś może zapewnić oświecenie?

+1

Od szybkiego spojrzenia na źródła, 'wydruków git-subtree' że gdy' git diff-index HEAD --exit kodu - cicho kończy "awarię", tzn. istnieją zmiany. Co stanie się, jeśli uruchomisz 'git diff-index HEAD'? – Cascabel

+0

Można również wypróbować opcję '-d' (debugowanie). – Cascabel

+0

Kiedy uruchamiam GIT diff-index HEAD, otrzymuję "fatalny: niejednoznaczny argument" HEAD ": nieznana wersja lub ścieżka nie znajduje się w drzewie roboczym.". Podobne wyjście, jeśli używam flagi -d debug. Pytanie brzmi, dlaczego HEAD byłby nieznany? –

Odpowiedz

-4

Spróbuj przeciągnąć bez numeru --squash zgodnie z opisem w this stackoverflow question.

+1

Dzięki, czuję się trochę niegrzeczny, nie głosuję/zaznaczam twoją odpowiedź, ale prawdą jest, że to było tak długie, że nie używaj poddrzewa już więcej i nie mogę naprawdę przetestować odpowiedzi, żeby sprawdzić, czy to działa! –

+1

Mam ten sam problem i usunięcie --squash go nie rozwiązuje. – Alkaline

+1

Na początku nie używałem squasha. W rzeczywistości nie wiem nawet, dlaczego uważasz, że to zadziała, ponieważ zadane przez Ciebie pytanie nie pytało o wiadomość, którą otrzymujemy .. –

10

Obejść to teraz. Mój problem wydawał mi się, że repozytorium było zupełnie nowe: nigdy nie popełniłem tego. Po zatwierdzeniu pliku na repo, mogłem pominąć ten błąd.

Jednak używając polecenia git subtree add C:\gitTest\repos\subA -d --prefix subA mam nowy błąd:

fatal just how do you expect me to merge 0 trees?

Po pałować na minutę, zorientowałem się, że to wymaga określonej wersji być przekazywane do niej. Więc to polecenie wydaje się udało:

git subtree add C:\gitTest\repos\subA HEAD -d --prefix subA

I oczywiście nie trzeba flaga -d debugowania.

+1

Dziękuję ** bardzo ** bardzo !! Twoja obserwacja dotycząca problemów z pustym repozytorium okazała się również ważna w kontekście [to pytanie o problemy z 'git tfs subtree add'] (http://stackoverflow.com/questions/25886008/how-to-manage-two -tfs-projects-in-one-git-repository/38081315 # 38081315). Dokładny komunikat o błędzie był "fatalny: niejednoznaczny argument" HEAD ": nieznana wersja lub ścieżka nie znajdowała się w drzewie roboczym." I chodziło o "brak HEAD" na kapitana w pustym repo. – quetzalcoatl

18

Po prostu miałem ten sam problem. Ze źródła GIT błąd jest generowany, gdy polecenie git diff-index HEAD zwraca wynik, nawet jeśli git status mówi, że drzewo robocze jest czyste.

Aby uniknąć tego błędu, w moim przypadku ponownego kasę prąd gałęzi drzewa pracy, a wszystko wydaje się OK: git checkout <branch>

To trochę mylić, ale jeśli ktoś może wyjaśnić dlaczego ...

+1

Opis problemu jest świetny, ale potrzebuję trochę więcej informacji, aby go zaimplementować ... OH, chodziło ci po prostu o uruchomienie "git checkout master" w głównym module (bez poddrzewa). Wspaniały! –

+0

Dzięki, działa jak urok! –

0

Właśnie miałem ten problem, kiedy:

  • dodano poddrzewo;
  • zrealizowany, dodałem go niepoprawnie (do niewłaściwego katalogu);
  • usunięto z rm;
  • próbował ponownie zaimportować (w odpowiednie miejsce).

Chociaż puppet diff było - prawidłowo - pokazuje nic, git diff-index HEAD liście każdego z plików usuniętych po prostu jako „usunięte” - choć nigdy nie popełnić-ED (o wiele mniej push-ed) cokolwiek.

wierzę, że jest to błąd w git (używając 2.7.0 tutaj) ... Bug czy nie, obejście jest przejście do żadnego innego oddziału (ze zwykłymi git checkout ....), a następnie z powrotem do Twój. Mam nadzieję, że to pomaga komuś - nawet jeśli nie oryginalnemu pytającemu.

1

git reset --hard naprawił mi

Od git reset --help

--hard Resets the index and working tree. Any changes to tracked files in the working tree since are discarded.

Powiązane problemy