Ponieważ git używa magazynu plików z adresami do zawartości, powinno być możliwe znalezienie gdzieś tam dowolnego drzewa, ale nie znam szczegółów. Zgaduję, że mógłbyś skopiować pliki z odłączonego katalogu roboczego do katalogu roboczego repozytorium, a następnie zatwierdzić wszystko, w jakiś sposób znaleźć skrót obiektu drzewa utworzonego przez commit i przeszukać istniejące zatwierdzenia dla tego, które odwołuje się do tego samego drzewa. .
Aby to zadziałało, drzewo będzie oczywiście musiało idealnie pasować, więc nie możesz dostać żadnych nieprzenośnych plików do zatwierdzenia (takich jak pliki obiektów, kopie redaktorów itp.).
Edycja: Właśnie wypróbowałem to na jednym repozytorium (z git cat-file commit HEAD
, aby pokazać obiekt drzewa w HEAD, i przeszukując wynik git log --pretty=raw
dla tego hasha drzewa), i to nie działało (nie znalazłem hasha w historii). Dostałem kilka ostrzeżeń o konwersji CRLF, kiedy wykonałem commit, więc to mógł być problem, tzn. Prawdopodobnie masz różne hashe dla tego samego drzewa, w zależności od tego, jak twój git jest skonfigurowany do łączenia plików tekstowych. Zaznaczam tę wiki społeczności, jeśli ktoś wie, jak to zrobić w sposób niezawodny.
Skrypt Pythona całkowicie zawiedzie, gdy go przetestowałem. Wydaje zatwierdzenie, które było całkowicie błędne. –