Bagaimana cara membuat repositori lokal saya tersedia untuk git-pull?

89

Saya memiliki repositori copy pekerjaan yang telah saya kerjakan tidak ada masalah; asal repositori ini ada di GitHub.

Saya ingin membuat repositori copy pekerjaan saya tersedia sebagai asal untuk mesin build saya (VM pada host fisik lain), sehingga komitmen yang saya buat pada copy pekerjaan saya dapat dibangun dan diuji pada mesin build tanpa harus melalui GitHub dulu. Saya sudah memiliki build untuk repositori GitHub, tapi saya ingin ini menjadi repositori / build "emas"; yaitu, jika ada sesuatu yang terjadi di sana, build terhadap GitHub harus dijamin berhasil.

Saya telah melihat dokumentasi di URL Git, dan melihat bahwa ada opsi untuk menggunakan URL dalam formulir git://host.xz[:port]/path/to/repo.git/(lihat, misalnya, dokumentasi git-clone ). Saya ingin melakukan ini dengan cara yang sesederhana mungkin, dengan konfigurasi minimum: Saya tidak ingin menyiapkan daemon SSH atau server web hanya untuk mempublikasikan ini ke mesin build saya.

Saya menjalankan Windows 7 x64 RC, saya menginstal MSysGit dan TortoiseGit, dan saya telah membuka port default Git (9814) di firewall. Anggaplah repo copy pekerjaan ada di D:\Visual Studio Projects\MyGitRepo, dan nama host-nya adalah devbox. Mesin pembuatnya adalah Windows Server 2008 x64. Saya telah mencoba perintah berikut di mesin build, dengan output terkait:

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)

Apakah saya melewatkan sesuatu?

alastairs
sumber
Tidak bisakah Anda mengatur share secara lokal, lalu melakukan 'git clone \\ workmachine \ share' dari buildmachine Anda? Bukan cara terbaik / paling efektif, tapi paling sederhana untuk dilakukan.
Joakim Elofsson

Jawaban:

134

Ada lima kemungkinan untuk menyiapkan repositori untuk ditarik dari:

  • sistem berkas lokal : git clone /path/to/repoatau git clone file://path/to/repo. Paling tidak berhasil jika Anda memiliki filesystem jaringan, tetapi tidak terlalu efisien dalam menggunakan jaringan. (Ini hampir persis solusi yang diusulkan oleh Joakim Elofsson )
  • HTTP protokol : git clone http://example.com/repo. Anda memerlukan server web apa pun , dan Anda juga perlu menjalankan (mungkin secara otomatis, dari sebuah hook) git-update-server-info untuk menghasilkan informasi yang diperlukan untuk mengambil / menarik melalui protokol "bodoh".
  • SSH : git clone ssh://example.com/srv/git/repoatau git clone example.com:/srv/git/repo. Anda perlu mengatur server SSH (daemon SSH), dan telah menginstal SSH pada klien (misalnya PuTTY pada MS Windows).
  • git protokol : git clone git://example.com/repo. Anda perlu menjalankan git-daemon di server; lihat dokumentasi untuk detailnya (Anda dapat menjalankannya sebagai proses mandiri hanya untuk mengambil, tidak perlu menjalankan sebagai layanan). git-daemon adalah bagian dari git.
  • bundle : Anda membuat bundel di server menggunakan perintah git-bundle , mentransfernya ke mesin klien dengan cara apa pun (bahkan melalui USB), dan menggandakan menggunakan git clone file.bndl(jika klon tidak berfungsi, Anda dapat melakukan "git init", "git remote add "dan" git fetch ").

Apa yang Anda lewatkan dalam contoh Anda mungkin menjalankan git-daemon di server. Itu, atau salah konfigurasi git-daemon.

Sayangnya saya tidak dapat membantu Anda menjalankan git-daemon sebagai layanan di MS Windows. Tidak ada pengumuman untuk versi terakhir msysGit tentang git-daemon yang tidak berfungsi.

Jakub Narębski
sumber
Oke, jadi saya perlu menginstal sesuatu atau menyalinnya secara manual setiap kali (mungkin membuat skrip melalui, saya kira. Apakah tiga opsi pertama juga memerlukan git-daemon?
alastairs
1
Hanya opsi "git protocol" yang perlu menjalankan git-daemon di server. Hanya opsi "SSH" dan "HTTP" yang memerlukan alat tambahan: baik sshd (ssh server) atau server web. Solusi bundel adalah solusi manual.
Jakub Narębski
Meskipun pertanyaannya adalah tentang 'pull', poster tersebut harus diperingatkan agar tidak menjalankan 'git push' setelahnya, karena repositori yang dia kloning tidak kosong.
yhager
Bisakah Anda menjelaskan hal ini, @yhager?
alastairs
1
Catatan bagi siapa pun yang mencoba opsi sistem berkas lokal: ingatlah untuk menghindari garis miring terbalik di jalur UNC! :-)
alastairs
17

Selain jawaban Jakub Narębski, ada cara lain yang lebih sesuai dengan pertanyaan awal Anda. Anda dapat mengkloning dari github seperti yang biasa Anda lakukan, lalu ketika Anda ingin melakukan satu kali penarikan dari repo lokal Anda, lakukan ini:

git pull /path/to/repo master

(alih-alih master, Anda dapat memasukkan nama cabang apa pun.)

Polong
sumber
Tip kecil (atau bagaimana saya mendapatkan pertanyaan ini): ..di <path / to / repo> tampaknya tidak berfungsi; gunakan jalur lengkap sebagai gantinya.
Dmitry Timofeev
1

Saya baru-baru ini mengubah salah satu proyek git saya untuk mereplikasi dirinya sendiri ke server HTTP menggunakan sitecopy untuk melakukan unggahan file yang sebenarnya.

Ini cukup mudah, cukup gunakan git update-server-infolalu mirror direktori .git ke direktori yang dapat diakses http di server Anda. Saya menggunakan 'project.git', yang cukup umum.

Git pull dari http: // site / project-git berfungsi seperti juara, dan saya tidak perlu memiliki apa pun di server kecuali akses FTP, meskipun sitecopy juga mendukung webdav.

Saya tidak merekomendasikan penggunaan sitecopy, karena tidak membuat banyak mesin sinkron dengan baik. Untuk proyek saya, repositori HTTP hanya dapat dibaca, dan pembaruan emas hanya berasal dari satu mesin, sehingga berfungsi dengan cukup baik.

davenpcj
sumber
1

Jika Anda memiliki jalan seperti

C:\Project\

dan Anda git initsudah melakukannya , jadi Anda juga memiliki folder

C:\Project\.git\

Anda sekarang membuat folder baru

C:\.git\

Masuk ke folder itu dan jalankan git clone --bare ..\Project( telanjang itu penting),
kembali ke C:\Project\folder Anda dan lakukan a git remote add-url local ..\.git\Project.
Sekarang Anda lakukan saja git add -A, git commit -m "HelloWorld"dan git push local master.

Anda dapat berbagi Projectfolder, menghubungkannya Z:dan melakukan git clone Z:\Project- Anda dapat menggunakan sekarang git pull origin masterdan git push origin masteruntuk mendorong / menarik perubahan dari satu komputer ke komputer lain.

metadings
sumber
0

Jika remote host Anda berada di jaringan windows yang sama, yaitu Anda dapat mengaksesnya sebagai \ remotehost, maka Anda dapat memetakan drive jaringan di explorer, katakanlah z: -> \ remotehost \ repodir, setelah itu Anda dapat menggunakan 'git clone / z / myproject 'untuk menggandakan proyek

jnr
sumber