Yerel depomu git-pull için nasıl kullanılabilir hale getirebilirim?


89

Sorunsuz çalıştığım, çalışan bir kopya havuzum var; bu deponun kaynağı GitHub'dadır.

Çalışma kopyası havuzumu derleme makinemin (başka bir fiziksel ana bilgisayardaki bir sanal makine) kaynağı olarak kullanılabilir hale getirmek istiyorum, böylece çalışma kopyama yaptığım taahhütler derleme makinesinde derleme makinesinde oluşturulabilir ve test edilebilir. Önce GitHub. GitHub deposu için zaten bir derlemem var, ancak bunun "altın" bir depo / yapı olmasını istiyorum; yani, oraya bir şey girerse, GitHub'a karşı derlemenin geçeceği garanti edilmelidir.

Git URL'lerindeki belgelere baktım ve formda bir URL kullanma seçeneğinin olduğunu git://host.xz[:port]/path/to/repo.git/görüyorum (örneğin git-clone belgelerine bakın ). Bunu mümkün olan en basit şekilde, minimum konfigürasyonla yapmak istiyorum: Bunu sadece kendi yapı makinemde yayınlamak için bir SSH arka plan programı veya web sunucusu kurmak istemiyorum.

Windows 7 x64 RC çalıştırıyorum, MSysGit ve TortoiseGit yüklüyüm ve güvenlik duvarında Git'in varsayılan bağlantı noktasını (9814) açtım. Lütfen çalışan kopya deposunun konumunda olduğunu D:\Visual Studio Projects\MyGitRepove ana bilgisayar adının olduğunu varsayın devbox. Yapı makinesi Windows Server 2008 x64'tür. Yapım makinesinde aşağıdaki komutu ilişkili çıktıyla deniyordum:

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)

Bir şey mi kaçırıyorum?


Yerel olarak bir paylaşım ayarlayıp ardından derleme makinenizden 'git clone \\ workmachine \ share' yapamaz mısınız? En iyi / en etkili yol değil, yapılacak en basit şey.
Joakim Elofsson

Yanıtlar:


135

Çekme için bir havuz oluşturmak için beş olasılık vardır:

  • yerel dosya sistemi : git clone /path/to/repoveya git clone file://path/to/repo. Ağa bağlı dosya sisteminiz varsa, ancak ağı çok verimli kullanmıyorsanız en az iş. (Bu neredeyse tam olarak Joakim Elofsson tarafından önerilen çözümdür )
  • HTTP protokolleri : git clone http://example.com/repo. Herhangi bir web sunucusuna ihtiyacınız var ve ayrıca "aptal" protokoller aracılığıyla almak / çekmek için gerekli bilgileri oluşturmak için git-update-server-info'u çalıştırmanız (belki de bir kancadan otomatik olarak) gerekir.
  • SSH : git clone ssh://example.com/srv/git/repoveya git clone example.com:/srv/git/repo. SSH sunucusunu (SSH arka plan programı) kurmanız ve istemcide SSH'yi kurmanız gerekir (örn. MS Windows'ta PuTTY).
  • git protokol : git clone git://example.com/repo. Git-daemon'u sunucuda çalıştırmanız gerekir ; ayrıntılar için belgelere bakın (bunu yalnızca getirme için bağımsız bir işlem olarak çalıştırabilirsiniz, hizmet olarak çalıştırmaya gerek yoktur). git-daemon git'in bir parçasıdır.
  • bundle : git-bundle komutunu kullanarak sunucuda paket oluşturursunuz , herhangi bir şekilde bir istemci makinesine aktarırsınız (USB aracılığıyla bile) ve kullanarak klonlayabilirsiniz git clone file.bndl(klon çalışmazsa, "git init", "git remote add "ve" git getir ").

Örneğinizde eksik olan şey muhtemelen git-daemon'u sunucuda çalıştırıyor. Bu veya git-daemon'un yanlış yapılandırılması.

Maalesef git-daemon'u MS Windows'ta hizmet olarak çalıştırmanıza yardımcı olamıyorum. MsysGit'in son sürümü için git-daemon'un çalışmadığına dair duyuruda hiçbir şey yok.


Ben yüklemeniz gerekir böylece Tamam, bir şey veya el bir paket her seferinde (üzerine kopyalamak muhtemelen sanırım aracılığıyla scripting ilk üç seçenek sıra git-daemon gerekiyor mu.?
alastairs

1
Yalnızca "git protokolü" seçeneğinin sunucuda git-daemon çalıştırması gerekir. Yalnızca "SSH" ve "HTTP" seçenekleri ekstra araçlar gerektirir: sshd (ssh sunucusu) veya web sunucusu. Paket çözümü manuel çözümdür.
Jakub Narębski

Soru 'çekme' ile ilgili olmasına rağmen, klonladığı depo çıplak olmadığı için poster daha sonra 'git push' çalıştırması konusunda uyarılmalıdır.
yhager

Lütfen bunu biraz daha detaylandırır mısın @yhager?
alastairs

1
Yerel dosya sistemi seçeneğini deneyen herkese not edin: UNC yolunda baştaki ters eğik çizgilerden kaçınmayı unutmayın! :-)
alastairs

17

Jakub Narębski'nin yanıtlarına ek olarak, orijinal sorunuzla daha uyumlu başka bir yol daha var. Her zaman yaptığınız gibi github'dan klonlayabilirsiniz, ardından yerel deponuzdan tek seferlik bir çekim yapmak istediğinizde şunu yapın:

git pull /path/to/repo master

(master yerine herhangi bir şube adı girebilirsiniz.)


Küçük bir ipucu (veya bu soruya nasıl ulaştım): ..<yol / / repo> 'da işe yaramıyor gibi görünüyor; bunun yerine tam bir yol kullanın.
Dmitry Timofeev


1

Yakın zamanda git projelerimden birini, gerçek dosya yüklemelerini yapmak için sitecopy kullanarak kendini bir HTTP sunucusuna çoğaltacak şekilde değiştirdim.

Oldukça kolaydır, sadece kullanın git update-server-infove .git dizinini sunucunuzdaki http erişilebilir bir dizine yansıtın. Oldukça yaygın olan 'project.git' kullandım.

Git http: // site / project- git'ten çek bir şampiyon gibi çalışıyor ve sunucuda FTP erişimi dışında hiçbir şeye sahip olmam gerekmiyor, ancak sitecopy webdav'ı da destekliyor.

Bununla birlikte, birden fazla makineyi iyi senkronize tutmadığı için sitecopy kullanmanızı önermiyorum. Projem için, HTTP deposu salt okunur ve altın güncellemeler sadece bir makineden geliyor, bu yüzden yeterince iyi çalışıyor.


1

Gibi bir yolun varsa

C:\Project\

ve git initzaten yaptın , yani bir de klasörün var

C:\Project\.git\

Şimdi yeni bir klasör oluşturuyorsunuz

C:\.git\

Bu klasöre gidin ve çalıştırın git clone --bare ..\Project( çıplak önemlidir), klasörünüze
geri dönün C:\Project\ve bir git remote add-url local ..\.git\Project.
Şimdi aynı senin git add -A, git commit -m "HelloWorld"ve git push local master.

ProjectKlasörü paylaşabilir, ona bağlanabilir Z:ve yapabilirsiniz git clone Z:\Project- şimdi git pull origin masterve git push origin masterdeğişiklikleri bir bilgisayardan diğerine itmek / çekmek için kullanabilirsiniz .


0

Uzak ana makineniz aynı Windows ağındaysa, yani ona \ uzak ana bilgisayar olarak erişebiliyorsanız, ağ sürücüsünü kaşifte eşleyebilirsiniz, diyelim z: -> \ remotehost \ repodir, bundan sonra 'git clone / z / myproject 'projeyi klonlamak için

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.