Jak mogę udostępnić moje lokalne repozytorium dla git-pull?

89

Mam działające repozytorium kopii, z którym pracowałem bez problemu; źródło tego repozytorium znajduje się na GitHub.

Chciałbym udostępnić moje repozytorium kopii roboczych jako źródło dla mojej maszyny kompilacji (maszyna wirtualna na innym fizycznym hoście), aby zatwierdzenia, które wprowadzam do mojej kopii roboczej, mogły być budowane i testowane na maszynie do kompilacji bez konieczności Najpierw GitHub. Mam już trwającą kompilację dla repozytorium GitHub, ale chciałbym, aby było to „złote” repozytorium / kompilacja; tj. jeśli coś tam trafi, kompilacja przeciwko GitHubowi powinna być gwarantowana.

Przejrzałem dokumentację dotyczącą adresów URL Git i zauważyłem, że istnieje możliwość użycia adresu URL w formularzu git://host.xz[:port]/path/to/repo.git/(zobacz np. Dokumentację git-clone ). Chcę to zrobić w najprostszy możliwy sposób, przy minimalnej konfiguracji: nie chcę konfigurować demona SSH lub serwera WWW tylko po to, aby opublikować to na mojej maszynie kompilacji.

Używam Windows 7 x64 RC, mam zainstalowane MSysGit i TortoiseGit i otworzyłem domyślny port Git (9814) na zaporze. Załóżmy, że repozytorium kopii roboczych znajduje się pod adresem D:\Visual Studio Projects\MyGitRepo, a nazwa hosta to devbox. Maszyna budująca to Windows Server 2008 x64. Próbowałem następującego polecenia na maszynie kompilacji, z powiązanymi danymi wyjściowymi:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

Czy coś mi brakuje?

alastairs
źródło
Czy nie możesz po prostu skonfigurować udziału lokalnie, a następnie wykonać polecenie „git clone \\ workmachine \ share” ze swojego buildmachine? Nie jest to najlepszy / najskuteczniejszy sposób, ale najprostsza rzecz do zrobienia.
Joakim Elofsson

Odpowiedzi:

134

Istnieje pięć możliwości skonfigurowania repozytorium do ściągania z:

  • lokalny system plików : git clone /path/to/repolub git clone file://path/to/repo. Najmniej działa, jeśli masz sieciowy system plików, ale niezbyt wydajne wykorzystanie sieci. (To prawie dokładnie rozwiązanie zaproponowane przez Joakima Elofssona )
  • Protokoły HTTP : git clone http://example.com/repo. Potrzebujesz dowolnego serwera WWW, a także musisz uruchomić (być może automatycznie, z hooka) git-update-server-info, aby wygenerować informacje wymagane do pobierania / ściągania przez „głupie” protokoły.
  • SSH : git clone ssh://example.com/srv/git/repolub git clone example.com:/srv/git/repo. Musisz skonfigurować serwer SSH (demona SSH) i mieć zainstalowane SSH na kliencie (np. PuTTY w MS Windows).
  • git protokół : git clone git://example.com/repo. Musisz uruchomić git-daemon na serwerze; szczegółowe informacje można znaleźć w dokumentacji (można go uruchomić jako samodzielny proces tylko do pobierania, a nie jako usługę). git-daemon jest częścią git.
  • bundle : generujesz pakiet na serwerze za pomocą polecenia git-bundle , przenosisz go na komputer kliencki w jakikolwiek sposób (nawet przez USB) i klonujesz przy użyciu git clone file.bndl(jeśli klon nie działa, możesz wykonać "git init", "git remote add „i„ git fetch ”).

To, czego brakuje w twoim przykładzie, to prawdopodobnie uruchomienie git-daemon na serwerze. To lub błędna konfiguracja git-daemon.

Niestety nie mogę Ci pomóc z uruchomieniem git-daemon jako usługi na MS Windows. Jednak w zapowiedzi ostatniej wersji msysGit nie ma nic o tym, że git-daemon nie działa.

Jakub Narębski
źródło
Ok, więc za każdym razem muszę coś zainstalować lub ręcznie skopiować do paczki (prawdopodobnie skryptując to przez, jak sądzę. Czy pierwsze trzy opcje również wymagają git-daemon?
alastairs
1
Tylko opcja „git protocol” wymaga uruchomienia git-daemon na serwerze. Tylko opcje „SSH” i „HTTP” wymagają dodatkowych narzędzi: sshd (serwer ssh) lub serwer WWW. Pakiet jest rozwiązaniem ręcznym.
Jakub Narębski
Chociaż pytanie dotyczyło „pull”, plakat musi zostać ostrzeżony przed uruchomieniem „git push”, ponieważ repozytorium, z którego klonuje, nie jest puste.
yhager
Czy mógłbyś to rozwinąć, @yhager?
alastairs
1
Uwaga dla wszystkich, którzy próbują opcji lokalnego systemu plików: pamiętaj, aby uniknąć początkowych ukośników odwrotnych w ścieżce UNC! :-)
alastairs
17

Oprócz odpowiedzi Jakuba Narębskiego jest jeszcze inny sposób, bardziej zgodny z Twoim pierwotnym pytaniem. Możesz sklonować z githuba, tak jak zwykle, a następnie, gdy chcesz wykonać jednorazowe pobranie z lokalnego repozytorium, po prostu zrób to:

git pull /path/to/repo master

(zamiast master możesz podać nazwę dowolnego oddziału).

Strąk
źródło
Mała wskazówka (czyli jak doszedłem do tego pytania): .. w <path / to / repo> nie działają; zamiast tego użyj pełnej ścieżki.
Dmitry Timofeev
1

Niedawno zmieniłem jeden z moich projektów git, aby replikował się na serwer HTTP przy użyciu sitecopy do faktycznego przesyłania plików.

To całkiem proste, po prostu użyj git update-server-info a następnie skopiuj katalog .git do jakiegoś dostępnego dla http katalogu na twoim serwerze. Użyłem „project.git”, co jest dość powszechne.

Git pull z http: // site / project-git działa jak mistrz, a ja nie muszę mieć niczego na serwerze poza dostępem do FTP, chociaż sitecopy również obsługuje webdav.

Nie polecam jednak korzystania z sitecopy, ponieważ nie zapewnia to dobrej synchronizacji wielu komputerów. W moim projekcie repozytorium HTTP jest przeznaczone tylko do odczytu, a złote aktualizacje pochodzą z tylko jednej maszyny, więc działa wystarczająco dobrze.

davenpcj
źródło
1

Jeśli masz taką ścieżkę

C:\Project\

i git initjuż to zrobiłeś , więc masz też folder

C:\Project\.git\

Teraz tworzysz nowy folder

C:\.git\

Wejdź do tego folderu i uruchom git clone --bare ..\Project( gołe jest ważne),
wróć do swojego C:\Project\folderu i wykonaj plik git remote add-url local ..\.git\Project.
Teraz wystarczy zrobić git add -A, git commit -m "HelloWorld"i git push local master.

Możesz udostępniać Projectfolder, podłączać go Z:i robić git clone Z:\Project- możesz używać teraz git pull origin masteri git push origin masterprzesyłać / wyciągać zmiany z jednego komputera na inny.

metadings
źródło
0

Jeśli twój zdalny host znajduje się w tej samej sieci Windows, tj. Możesz uzyskać do niego dostęp jako \ remotehost, możesz zmapować dysk sieciowy w eksploratorze, powiedzmy z: -> \ remotehost \ repodir, po czym możesz użyć 'git clone / z / myproject ”, aby sklonować projekt

jnr
źródło