Depomu yayınlamak için çıplak bir depo oluşturdum, ancak çıplak depoyu ana deponun mevcut durumuyla nasıl güncelleyeceğimi çözemiyorum.
Depomu yayınlamak için çıplak bir depo oluşturdum, ancak çıplak depoyu ana deponun mevcut durumuyla nasıl güncelleyeceğimi çözemiyorum.
Yanıtlar:
Ana depodaki tüm nesneleri kopyalamak istiyorsanız, bunu ana deponun içinde yapın:
git push --all <url-of-bare-repo>
Alternatif olarak, çıplak deponun içinde bir getirme yapın:
git fetch <url-of-main-repo>
Çekme yapamazsınız çünkü bir çekme HEAD, çıplak bir deponun sahip olmadığı bir birleşmek ister .
Gelecekte biraz yazmaktan tasarruf etmek için bunları uzaktan kumanda olarak ekleyebilirsiniz:
git remote add <whatever-name> <url-of-other-repo>
O zaman basitçe yapabilirsin
git push --all <whatever-name>
veya
git fetch <whatever-name>
İçinde bulunduğunuz depoya bağlı olarak. Varsa <whatever-name>, origintamamen dışarıda bırakabilirsiniz.
Sorumluluk reddi: Ben bir git gurusu değilim. Yanlış bir şey söylersem aydınlanmak isterim!
Güncelleme: Yorumları okuyun!
git-fetch --allÇıplak deponun içinde bir yaptığımda, ana depoda yaptığım güncellemeleri görmedim, ancak ana depodan gönderirken git push --all <url-of-bare-repo>güncellemeleri görüyorum git log. Muhtemelen bunun basit bir açıklaması vardır - birisi açıklayabilir mi?
git log, bu güncellemeleri çıplak depoda göstermiyor demek istiyorum . ( git log --allÇıplak depoyu klonlayarak git log --allveya sadece orada görünmesi gereken yeni dosyalara bakarak oluşturulan bir çalışma reposu da yapmaz ve yapmaz ). Kendiniz görmek için oldukça hızlı bir test. Çoğunlukla neyi kaçırdığımı merak ediyorum.
git fetch -q origin master:masteryerel çıplak deponuzda yapabilirsiniz. Bu, yeni öğeleri github'ın ana şubesinden alacak ve yerel ana şubenizi ona güncelleyecektir.
master:master, HEAD'i uzak deponunkine ilerletmek için gereken şeydir. Benim durumumda bir sorun nedeniyle artık çıplak depomuza bağlanamadım çünkü git eksikti. Çözülene kadar bir ters tünel yapıyorum ve kullanarak merkezi depoya git fetch ssh://localhost:8765/... master:mastergetiriyorum : ve bir cazibe gibi çalışıyor. Teşekkürler!
git fetch origin *:*
Aşağıdaki komutu kullanarak bir depo oluşturdum
git clone --bare <remote_repo>
Sonra Thomas'ın cevabını kullanarak çıplak klonu güncellemeye çalıştım, ancak benim için işe yaramadı. Çıplak depoyu güncellemek için (Let_Me_Be'nin sorduğunu düşündüğüm buydu), bir ayna deposu oluşturmam gerekiyordu:
git clone --mirror <remote_repo>
Ardından, ana deponun güncellemelerini almak için yansıtılmış depoda aşağıdaki komutu çalıştırabilirim:
git fetch --all
Bir Git Deposunu Çekerek Aynala okuyarak bu çözüme rastladım
[remote "origin"]bölümünde, eklemek fetch = +refs/*:refs/*vemirror = true
İle yeniden yanı sıra tek çözüm git clone --mirrorolduğunu Gregor :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
o zaman yapabilir git fetchve güncellemeleri göreceksiniz. İşin tuhafı, bundan önce, remoteyapılandırılmış olmasına rağmen, listelenmiş şubesi olmamasıdır git branch -a.
git remote updateişin yapılmasına izin vermek için kullanır .
--forceve --prunesırasıyla eklemeniz gerekebilir git fetch.
varsayarsak:
$ git clone --bare https://github.com/.../foo.git
Şununla getir:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Not: önce dizine --git-dir=foo.gitgirerseniz gerekli değildir cd.
origintanımlanmamışsa, originparçayı her zaman orijinal deponuza giden yol / url ile değiştirebilirsiniz . örn.$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Çok fazla uğraştıktan sonra bunun benim için işe yaradığını buldum.
Bir Zamanlar:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Her zaman senkronize etmek istediğimde:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
git config remote.origin.fetch 'refs/heads/*:refs/heads/*') anahtardır. Güzel cevap, teşekkürler!
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'cevap satırdır . Bu komuta bastıktan sonra, sadece yapabilirim git fetchve repo uzaktaki ile senkronize olur.
Çıplak depoyu uzak depo olarak ekleyin, ardından kullanın git push.
Benim için bu kombinasyon işe yaradı:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/:refs/heads/*
git push --mirror
-u getirme parametresi gerekliydi, aksi takdirde şu hata mesajını alıyorum: "Çıplak olmayan deponun geçerli dal başvurularına / başlarına / ana birimine getirmeyi reddediyorum" (ayrıca bkz. https://stackoverflow.com/a/19205680/4807875 )