Git dosyalarını depo dışındaki bir konuma teslim alma


21

Havuzun dışındaki bir yere “ödeme” yapmak mümkün müdür? Demek istediğim ".git" dizini olmayan bir dalın klonu.

Örneğin: Bir web sitesini yönetmek için git'i kullanın. Bazı dosyaları düzenler, taahhüt eder ve WebDAV aracılığıyla dosyaları bir web sunucusuna kopyalarsınız. WebDAV yolu, deponun dışında, “.git” içermemesi gereken konum olacaktır.

Git'in oluşturulduğu sorun bu olmayabilir, ama bu mümkün mü?

Yanıtlar:


19

Evet, bu kesinlikle mümkün.

Diyelim ki /srv/production.githedef sistemde / sunucuda çıplak bir havuz var .

Hedef sistemde şu komutu kullanabilirim: cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Çıplak olmayan bir depodaysam komut biraz farklıdır. Diyelim ki ben çıplak olmayan bir yerim var /srv/testing. Kullanacağım ödeme içincd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Aslında sistemimde bunu depomdaki taahhüt sonrası kancada otomatikleştiriyorum production.git. Yani production.giten son sürüme bastığınızda otomatik olarak web köküne göz atın.

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

Uzaktaki sisteme tek erişiminiz webdav ise, webdav ana bilgisayarına doğrudan veya geçici bir konuma ödeme yapacak bir taahhüt sonrası kanca yazmak kesinlikle mümkün olmalıdır.


birden fazla yerde aradı .. sadece çalışma çözümü, ayrıca temiz!
karthikeayan

6

Sadece dosyaları istiyorsanız, kullanabilirsiniz git archive. Genellikle tarballs veya ZIP gibi bir arşive yazar, ancak bunu da yapabilirsiniz:

git archive master | tar -x -C /some/path

Burada, masterarşivlemek istediğiniz dal açıktır ve /some/pathsadece dosyaları içerir - hayır .gitveya .gitignore.


Ya da git checkout-indexdosyaların bir "çıkış" kısmına daha çok benzeyen kullanabilirsiniz :

git checkout-index -f -a --prefix=/some/path/

Burada, -aseçenek gittüm dosyaları kontrol etmeyi söyler . Ön ek çıktıya eklenir. Birisi de vermek için etrafına bir sargı yazdı git export.


2
Bence bunu olması gerekenden daha zor hale getiriyorsun. Sadece çalıştırmak GIT_WORK_TREE=/destinationpath git checkout -fiçin geçerli dizin çıplak depo üst veya .git alt dizin uzaklıkta iken. / Destinationpath
Zoredache

Tamam, bir şekilde bu seçeneği kaçırmış olmalıyım, sana +1.
slhck

1
Dürüst olmak gerekirse, bu seçeneği daha sezgisel buluyorum. Ve daha az hata eğilimli.
Minix
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.