Çıplak depomu nasıl güncellerim?


Yanıtlar:


83

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!


7
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?
pho79

2
@Thomas - Evet, "görmedim" derken 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.
pho79

71
En uzak deponuz, erişiminizin olmadığı, push çalıştırılamayan github gibi bir şeyse, git fetch -q origin master:masteryerel çıplak deponuzda yapabilirsiniz. Bu, yeni öğeleri github'ın ana şubesinden alacak ve yerel ana şubenizi ona güncelleyecektir.
Altreus

4
@Altreus Indeed 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!
estani

3
@Altreus Tüm şubeleri istiyorsanız, o zaman yapabilirsinizgit fetch origin *:*
JBert

71

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


22
Mevcut bir çıplak depoyu yansıtmak üzere değiştirmek için yapmanız gereken tek şey <REPO> .git / config adresindeki git config dosyasına 2 satır eklemektir. In [remote "origin"]bölümünde, eklemek fetch = +refs/*:refs/*vemirror = true
Isaac Betesh

@IsaacBetesh Günümü kurtardın :)
smc

54

İ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.


1
Bu bana gerçekten yardımcı oldu! Capistrano proje / repo da bu ayarı tek hatlı git remote updateişin yapılmasına izin vermek için kullanır .
Minqi Pan

1
Uzaktan kumandada zorunlu güncellenmiş veya silinmiş dallar varsa (ve bu değişiklikleri yansıtmak istiyorsanız), satıra --forceve --prunesırasıyla eklemeniz gerekebilir git fetch.
Elliott Slaughter

46

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.


2
Bunun ne zaman gerçekleştiğinin farkında olmasam da, 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/*
antak

Bu tam olarak aradığım şeydi. Bu mükemmel çalıştı.
Maxime Rouiller

13

Ç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

7
Üçüncü satır ( git config remote.origin.fetch 'refs/heads/*:refs/heads/*') anahtardır. Güzel cevap, teşekkürler!
peterh - Monica'yı eski durumuna döndür

2
@Peterh'in dediği gibi, 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.
joker

3

Çıplak depoyu uzak depo olarak ekleyin, ardından kullanın git push.


Yani bunu zorlamadan yapmak istersem, çıplak bir depo kullanamam ve sembolik bir bağlantı veya bunun gibi bir şey kullanamam?
Šimon Tóth

İtme, arşiv içeriğini çıplak bir havuza aktarmak için normal yöntemdir, bundan kaçınmaya gerek yoktur.
Philipp

2
Her zaman itemezsin. Örneğin, çıplak özel bir
ağdaysa

0

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 )

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.