2010-09-22 14 views
71

Bazı A klasörü dosyalarında A (bir git projesi) var. Bu php dosyasında "git log" i çalıştırmak istiyorum fakat B klasörü için. Folder B başka bir git projesidir (bu yüzden log A ve B arasında farklıdır).Başka bir klasörde git "log" komutunu kullan

Bunu kabuk komutuyla nasıl yapabilirim?

itibaren
+2

'cd/diğer/dir && git günlüğü && bash kabuğundaki cd? – takeshin

+1

sorunuz açık değil. Git 1.8 ile –

+1

.5 (Q4 2013), '--git-dir' ayarını yapmak yerine başka bir seçeneğiniz olacaktır: [aşağıya bakın] (http://stackoverflow.com/a/20115753/6309) – VonC

cevap

114

, man git:

herhangi komutları geçirmeden önce, --git-dir parametre ile yapabilirsiniz.

git --git-dir /foo/bar/.git log 

(.git dizin gereklidir belirtme.) documentation Gönderen:

--git-dir=<path>

deposuna yolunu ayarla. Bu ayrıca GIT_DIR ortam değişkenini ayarlayarak da kontrol edilebilir. Geçerli çalışma dizinine mutlak bir yol veya göreceli bir yol olabilir.

+1

Denerim ama çalışmıyor:/ – AlphaB

+21

'.git' dizini başvurmak zorunda. Git --git-dir =/foo/bar/.git log'unu deneyin. – mipadi

+5

Üzgünüm, yanlış - = -irt-dir ve dizin adı arasında koymayın. böylece git --git-dir/foo/bar log olur – rgngl

83

git 1.8.5 (Q4 2013) ile --git-dir'u ayarlamak yerine başka bir seçeneğiniz olacaktır. Sadece "make -C <directory>" gibi

git -C B log 

, "git -C <directory> ..." Git başka bir şey yapmadan önce oraya gitmek söyler:
Tür, klasördeki B içinde git log yürütmek istiyorum.


Nazri Ramliy tarafından commit 44e1e4 bakınız:

  1. (cd ~/foo && git status)
    git --git-dir=~/foo/.git --work-tree=~/foo status
    GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status
  2. : Geçerli dizini bırakmadan farklı bir dizinde git komutunu çağırmak için daha basılmasını alır

    Yukarıda gösterilen

  3. for d in d1 d2 d3; do (cd $d && git svn rebase); done

yöntem kodlama için kabul edilebilir, ancak hızlı bir komut satırı çağrıları için çok zahmetlidir. Bu yeni seçenek sayesinde

, yukarıda az tuşa basarak yapılabilir:

  1. git -C ~/foo status
  2. git -C ../.. grep foo
  3. for d in d1 d2 d3; do git -C $d svn rebase; done
+11

Bu çok daha güvenilir bir yaklaşımdır ve "log" dışındaki komutlar için çalışır. – Air

+0

wow, ve adam sayfasında hiçbir şey yok! Ne ayıp. (Tamam, şimdi 2.7 adam sayfasında ekledim görüyorum) – akostadinov

+0

Ne yazık ki, bu hala göreceli yolları karıştırdığı için Mercurial'ın -R' seçeneği kadar güzel değil.Örneğin, 'git -C subdir log subdir/myfile' yazıyorsam, bir hata veriyor (alt anahtar/myfile') – jwd

İlgili konular