2012-03-07 11 views
10

Tworzę narzędzie, które pozwoli ludziom przechowywać "rozwiązania" w testach. Ponieważ nie chcę wymyślać kontroli wersji, postanowiłem użyć plików git/blob/object - moim pomysłem jest utworzenie obiektu drzewa git poza bieżącym katalogiem roboczym.Utwórz drzewo git z drzewa roboczego bez dotykania indeksu?

Problem polega na tym, że chcę, aby to narzędzie nie dotykało stanu repozytorium użytkownika, z wyjątkiem szukania skrótów do istniejących obiektów.

Sprawdziłem zarówno mktree i write-tree, a pierwszy potrzebuje ls-tree wyników, a drugi musi zbadać indeks. Żadne z tych nie jest tym, czego chcę.

Cieszę się, że mogę zanurkować głębiej i napisać analogi tych poleceń do drzewa roboczego, ale mam problem z wymyśleniem jakichkolwiek narzędzi git na niższym poziomie do manipulowania drzewami, obiektami i obiektami.

Idealnie, użytkownik będzie mógł uruchomić:

$ git create-tree . 

i będzie git wypluć hash nowo utworzonego obiektu drzewa.

+0

Nie rozumiem, co dokładnie chcesz zrobić. Chcesz "nie dotykać stanu repozytorium użytkownika", ale jednocześnie tworzyć drzewo w tym samym repozytorium? Jak zamierzasz używać tego drzewa? – svick

+0

Nie używam go jako "historii", używam go tylko jako migawki części repozytorium. To niekonwencjonalne. –

+0

Dobra, ale co zrobisz z tą migawką? Jak zamierzasz go wydostać z repozytorium? – svick

Odpowiedz

11

Korzystanie z git mktree jest z pewnością wykonalne. Czyta się w formacie ls-tree -formatowany tekst, ale można go wygenerować samodzielnie przy użyciu dowolnego mechanizmu.

Powiedział, że może być łatwiej iść do przodu i korzystać z indeksu. W końcu możesz określić dowolną lokalizację jako indeks za pomocą zmiennej środowiskowej GIT_INDEX_FILE. Po prostu ustaw ten var, aby wskazywał na tymczasową lokalizację, stwórz swój indeks, jak chcesz, utwórz drzewo, a następnie zresetuj env var i wyrzuć tymczasowy indeks.

+0

Doskonały. W jakiś sposób przegapiłem, że lokalizacja indeksu była konfigurowalna. Dzięki! –

Powiązane problemy