Chcę używać kontroli wersji, ale ze względów bezpieczeństwa serwer, na którym pracuję, nie ma dostępu do Internetu: mogę przenosić pliki tylko na dysku flash USB. Czy nadal mogę używać Git w tej konfiguracji? Czy mogę tworzyć małe łatki, które mogę zastosować w repozytorium Git?
84
server
dla maszyny niepodłączonej do żadnej sieci. Może to być tylko sieć lokalna, nawet bez dostępu do Internetu, ale mimo to jest to sieć.Odpowiedzi:
Jasne, w Git nie ma nic, co wymaga określonego protokołu. Zaraz po wyjęciu z pudełka standardowy klient obsługuje HTTP (S), SSH, niestandardowy protokół Git i, co ważne, protokół lokalny . To tylko pobiera ścieżkę do
.git
katalogu lokalnego , który może znajdować się w katalogu roboczym (/path/to/project/.git
) lub po prostu katalogu (/path/to/project.git
), choć nazewnictwo to tylko konwencja.Oznacza to, że możesz oczywiście dodać dysk flash jako zdalny:
lub w systemie Windows:
Lub nawet dodaj go jako dodatkowego pilota o innej nazwie (jeśli wolisz
origin
wskazywać gdzieś serwer internetowy):Następnie możesz po prostu nacisnąć / pociągnąć do / z tego pilota, tak jak każdy inny.
Jeśli przeczytasz dokumentację , zauważysz, że istnieje również
file://
protokół, który zachowuje się nieco inaczej. Zalecane jest użycie ścieżki lokalnej, ponieważ wykorzysta to dodatkowe optymalizacje - jeśli użyjeszfile://
protokołu, git użyje standardowych komponentów sieciowych (do rozmowy z dyskiem lokalnym), co jest wolniejsze.źródło
file://
Jest nieco bardziej elastyczną. Umożliwia korzystanie z niektórych funkcji (takich jak płytkie klony), których nie można użyć w przypadku lokalnej ścieżki.Na jednym komputerze nic specjalnego nie jest potrzebne. Uruchom
git init
w wybranym katalogu i pracuj z Git tak jak zwykle.Istnieje kilka metod synchronizacji repozytorium na wielu komputerach.
Metoda 1a (w ogóle brak sieci): Możesz utworzyć „puste repozytorium” na pamięci USB, a następnie pchnąć do niego i wyciągnąć z niego, tak jak w przypadku każdego innego zdalnego repozytorium. Innymi słowy, operacje repozytorium za pośrednictwem lokalnych ścieżek nie różnią się niczym od operacji za pośrednictwem adresów URL SSH lub HTTPS.
Utwórz „zdalne” repozytorium:
Na komputerze 1 wepchnij wszystko do niego:
Na komputerze 2, tak samo jak zawsze.
(Możesz również push / fetch / pull bezpośrednio z adresu URL lub ścieżki).
Metoda 1b (sieć wewnętrzna): Jeśli masz wewnętrzny serwer z SSH i jeśli jest zainstalowany Git, możesz zrobić to samo, co powyżej , po prostu podaj adres SSH za pomocą składni
[user@]host:path
lubssh://[user@]host/path
.Utwórz „zdalne” repozytorium, uruchamiając je
git init --bare <somepath.git>
na wyznaczonym serwerze (przez SSH).Na komputerze 1 w taki sam sposób, jak pokazano wcześniej.
Lub jeśli wolisz:
Na komputerze 2 ponownie to samo co metoda 1a.
Metoda 2: Możesz utworzyć „pakiety transferu”, które archiwizują podaną listę zatwierdzeń w jednym pliku.
Niestety polecenia pakietu nie zapamiętują automatycznie tego, co było już w pakiecie ostatnim razem, dlatego konieczne jest ręczne tagowanie lub zapisywanie notatek. Po prostu wezmę przykłady z podręcznika git-bundle.
Na komputerze 1 utwórz pakiet całej gałęzi:
Na komputerze 2 wyciągnij z pakietu, jakby to było repozytorium:
Kolejne pakiety nie muszą pakować całości
master
- mogąlast-bundled..master
zamiast tego spakować tylko nowo dodane commity .Na komputerze 1 utwórz pakiet nowo dodanych zatwierdzeń:
Jak powyżej.
źródło
manual tagging or note-keeping is needed
, jedna opcja, chyba że repo jest bardzo duże, to:git bundle create my.bundle --all
powinna zawierać wszystko.git/
ukrytym folderze), bez „działającego drzewa” (plików edytowalnych). Jest to preferowana forma repozytoriówgit push
.git bundle create
Jedną z metod jest użycie pamięci zewnętrznej do wymiany danych między repozytoriami to pakiet git . W ten sposób masz tylko pojedyncze pliki dla każdego transferu, a nie pośrednie repozytoria Git.
Każde „git push” zmienia się w tworzenie pliku, „git fetch” pobiera rzeczy z tego pliku.
Sesja demonstracyjna
Utworzenie pierwszego repozytorium i wykonanie pierwszego „push”
„klonowanie” do drugiego repozytorium (tj. drugiego komputera):
Wprowadzanie pewnych zmian i „wypychanie” ich do innego pliku pakietu:
„ściąganie” zmian do pierwszego repozytorium:
W przeciwieństwie do pierwszego pakietu, drugi zawiera tylko częściową historię Git i nie można go bezpośrednio klonować:
Wadą jest używanie pakietów, które wymagają ręcznego określania zakresu zatwierdzeń, które powinien zawierać każdy pakiet. W przeciwieństwie do tego
git push
,git bundle
nie śledzi tego, co było w poprzednim pakiecie, musisz ręcznie dostosować,refs/remotes/origin/master
inaczej pakiety będą większe niż mogłoby być.źródło
--all
flagi, aby uzyskać wszystko. Jeśli repo jest wystarczająco małe, jest to najprostszy proces, ponieważ po prostu przenosisz wszystko za każdym razem! Tylko nie zgub karty pamięci - prawdopodobnie największy problem z bezpieczeństwem!Musisz najpierw zainstalować Git . Następnie, aby utworzyć nowe repozytorium, uruchom w skopiowanym folderze:
Następnie możesz dodać pliki, które chcesz kontrolować wersję
git add
(dodaj-a
dla wszystkich plików) i zacznij zatwierdzać zmiany (git commit
).Nie musisz naciskać na żaden pilot, ponieważ możesz pracować nad historią lokalną (
git log
).Aby uzyskać więcej informacji, sprawdź:
git
- prosty przewodnikPchanie / ciągnięcie bez internetu
Za pomocą
git push
polecenia można przesłać SSH (przy użyciu połączenia lokalnego, intranetu):lub wypychanie do folderu:
Zakłada się, że masz dwie kopie swojego repozytorium.
To samo z ciągnięciem, np
Łatanie
Aby zastosować łaty, możesz użyć
patch
polecenia lubgit apply
.Zobacz: Utwórz plik poprawki lub pliku różnicowego z repozytorium git i zastosuj go do innego innego repozytorium git .
źródło
Możesz także używać Git lokalnie. Wtedy twoje zatwierdzenia są przechowywane tylko lokalnie i nadal masz kontrolę nad wersją (i możesz różnicować / scalać itp.), Ale po prostu nie możesz uzyskać dostępu do repozytorium z innego komputera.
Możesz uruchomić lokalne repozytorium Git, uruchamiając je
git init
w folderze lokalnym. Jak opisano tutaj .źródło