Başka bir depoda "git pull" işlemini yürütmek için güncelleme sonrası kancayı kullanırken "ölümcül: git deposu değil:". "


90

Git'te yeniyim, bu yüzden burada terminolojiyi kötüye kullanırsam özür dilerim (ve lütfen beni düzeltin), ama elimden gelenin en iyisini yapacağım.

Bir web sunucusunda çıplak bir git repo (hub) ve bir geliştirme sitesi çalışan kopya (prime) kurmaya çalışıyorum. Bu makaleden sonra biçimlendirmeye çalıştım . Geliştirme çalışma kopyasının, hub deposuna her aktarıldığında güncellenmesini istiyorum. Bunun için uygun kancanın post-updateböyle yarattığım izlenimi altındayım :

#!/bin/sh
whoami
cd /path/to/working-copy/
RET=`git pull`
echo $RET

Güncelleme

Değişiklikleri yerel depomdan çıplak hub'a aktardığımda, güncelleme sonrası komut dosyasından aşağıdaki çıktıyı alıyorum:

remote: sites
remote: fatal: Not a git repository: '.'

Ancak sunucuya kullanıcı 'siteler' olarak SSH girersem ve bu komut dosyasını manuel olarak yürütürsem, harika çalışıyor Bu kancada veya komut dosyasında neyin yanlış olabileceğine dair herhangi bir fikriniz var mı?

Yanıtlar:


179

İşte sonuçta işe yarayan senaryo. Uzaktan çalışmasını engelleyen asıl eksik olduğum şey sanırımunset GIT_DIR

#!/bin/sh
cd /path/to/working-copy/ || exit
unset GIT_DIR
git pull repo branch

exec git-update-server-info

18
Onaylayabilirim, çözülme GIT_DIRsorunu çözer.
jmtd

16
Nedenini anlamaya istekli olanlar için: bunun nedeni git'in GIT_DIRyerine değişkeni kullanmasıdır PWD. cd-ing PWDdeğil değiştirir GIT_DIR. Birincisinin mevcut olmaması durumunda, ' dan' GIT_DIRye bir geri dönüş PWDolmalıdır.
zupa

Soru, git'in neden kanca betiği için bunu yapmayı gerekli görmesi gerektiğidir (GIT_DIR'i, betikte bile 'cd' başka bir yerde 'git her neyse' hala çalışacak şekilde ayarlayın)? Ben şahsen git'in bu tür bir sihir yapmamasını tercih ederim.
Steven Haryanto

2
Bunun arkasındaki sebep Git uygulayarak olmasıdır bazı ortam değişkenleri için tüm çekirdek git komutları.
Casey

Sonrasında bir birleştirme çatışması olduğunda ne olur git pull?
lolololol ol


0

Ayarlanmamış olmasına rağmen GIT_DIR sadece çalışıyor.

GIT_DIR'i başka bir yere yanlış ayarladığınızda sorun ortaya çıkar.

bunun yerine şunu ekleyebilirsiniz: GIT_DIR = .git / Çalışacak


0

Benim durumumda bir çalışma ağacı belirlemiştim ve bu, pull(veya daha doğrusu fetch) gibi bazı komutları bozuyor .

Çalışma ağacını, git yapılandırmanızda bulunuyorsa kaldırmak için şu yolla yapılır:

git config --unset core.worktree

(Bir çalışma ağacı kurmanın başka yolları da vardır)

Dikkat edilmesi gereken önemli,

İlk etapta özel bir çalışma ağacı kullanarak çevrenizdeki bu deliği kendiniz kazmadığınız sürece, bu sizin probleminiz olmakta hiçbir değişiklik yoktur.

Şaka:

Bu bana git internals'ın .git/bazı durumlarda worktree + ile ilgili yolları kullandığını gösteriyor . Tecrübelerime göre çalışma ağaçları, git'in en temel kısımları dışında hiçbir şekilde desteklenmiyor. Derinlemesine deney yapmadım, git dizini yapılandırma değişkenini düzgün bir şekilde ayarlarsam, muhtemelen oynamadığım Git davranırdı.


-1

Muhtemelen bir izin sorununuz var. Çıplak git deponuzu nasıl kurduğunuzdan emin değilim, ancak gitkullanıcının altında çalışıyorsa, kullanıcının gitbunu gerçekleştirmesine izin verildiğinden emin olun .git pull proje dizininizde .

İsteğe bağlı olarak, kanca çalıştırıldığında hangi kullanıcı olduğunuzu öğrenmek için şunu deneyin:

echo `whoami`

git kullanıcısı olarak sunucuya ssh gönderirsem, proje dizinimde git pull'ı sorunsuz bir şekilde kullanabilirim. Ben inanıyorum senaryoyu yürütme edilmelidir kullanıcıdır. Whoami satırını betiğe eklemeyi deneyebilirim, ancak bu komut dosyasının çıktısı bir hook olarak çalıştırıldığında nereye gidiyor? Belki de bu çıktıyı yankı yapmak yerine bir günlük dosyasına göndermem gerekiyor?
Ty W

Ne gelmez echo `whoami`bunu whoamideğil mi?
Christoffer Hammarström

Bir kanca komut dosyasından stdout'a çıktı, eylemi yapan uzaktan kumanda tarafından görülebilir. Ya da başka bir deyişle, 'git push' derseniz, uzaktan kumandadaki bir kancanın çıktısı standart çıktıda görünecektir.
ebneter

evet, eşyalarla oynarken bunu fark ettim. çok uygun :)
Ty W
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.