Oto definicja nagiego repozytorium z gitglossary :
Samo repozytorium jest zwykle odpowiednio nazwanym katalogiem z sufiksem .git, który nie ma pobranej lokalnie kopii żadnego z plików znajdujących się pod kontrolą wersji. Oznacza to, że wszystkie pliki administracyjne i kontrolne Git, które normalnie byłyby obecne w ukrytym podkatalogu .git, są bezpośrednio obecne w katalogu repository.git, a żadne inne pliki nie są obecne i wyewidencjonowane. Zwykle wydawcy repozytoriów publicznych udostępniają repozytoria nagie.
Przybyłem tutaj, ponieważ bawiłem się „lokalnym repozytorium” i chciałem móc robić wszystko, co chciałem, tak jakby to było zdalne repozytorium. Po prostu się bawiłem, próbując dowiedzieć się o git. Zakładam, że taka jest sytuacja każdego, kto chce przeczytać tę odpowiedź.
Chciałbym na opinii biegłego lub kilku konkretnych przykłady przeciwne, jednak wydaje się, że (po grzebać jakiegoś kodu źródłowego git że znalazłem) po prostu przechodząc do pliku .git/config
i ustawienie rdzeń atrybut urodziła się prawdą , git pozwoli Ci zrobić cokolwiek chcesz zrobić zdalnie z repozytorium. To znaczy, następujące linie powinny istnieć w .git/config
:
[core]
...
bare = true
...
(To jest mniej więcej to polecenie git config --bool core.bare true
zrobi to , co prawdopodobnie zaleca się w przypadku bardziej skomplikowanych sytuacji)
Moim uzasadnieniem dla tego twierdzenia jest to, że w kodzie źródłowym git wydaje się, że istnieją dwa różne sposoby testowania, czy repo jest czyste, czy nie. Jednym z nich jest sprawdzenie zmiennej globalnej is_bare_repository_cfg
. Jest to ustawiane podczas pewnej fazy instalacji i odzwierciedla wartość znalezioną w .git/config
pliku. Drugi jest funkcją is_bare_repository()
. Oto definicja tej funkcji:
int is_bare_repository(void)
{
/* if core.bare is not 'false', let's see if there is a work tree */
return is_bare_repository_cfg && !get_git_work_tree();
}
Ja nie mam czasu ani wiedzy, aby to powiedzieć z absolutną pewnością, ale o ile mogę powiedzieć, jeśli masz bare
zestaw przypisywać true
w .git/config
ten zawsze powinien wrócić 1
. Reszta funkcji prawdopodobnie dotyczy następującej sytuacji:
- core.bare jest niezdefiniowany (tj. ani prawda, ani fałsz)
- Nie ma drzewa roboczego (tzn. Podkatalog .git jest katalogiem głównym)
Eksperymentuję z tym, kiedy będę mógł później, ale wydaje się to wskazywać, że ustawienie core.bare = true jest równoważne z usunięciem core.bare z pliku konfiguracyjnego i prawidłowym skonfigurowaniem katalogów.
W każdym razie ustawienie core.bare = true z pewnością pozwoli ci to zrobić, ale nie jestem pewien, czy obecność plików projektu spowoduje, że niektóre inne operacje nie będą działać poprawnie. Jest to interesujące i przypuszczam, że pouczające jest pchanie do repozytorium i sprawdzanie, co się stało lokalnie (tj. Uruchamianie i sprawdzanie git status
wyników).
mv repo/.git repo.git; rm -rf repo