Git "log" komutunu başka bir klasörde kullanın


128

Klasör A'da (bir git projesi olan) bazı php dosyalarım var. Bu php dosyasında "git log" u çalıştırmak istiyorum ama B klasörü için. Klasör B başka bir git projesidir (bu nedenle günlük A ve B arasında farklıdır).

Bunu kabuk komutuyla nasıl yapabilirim?


3
cd /other/dir && git log && cd -bash shell'de?
39'da takeshin

1
Git 1.8.5 (Q4 2013) ile, ayarlamak yerine başka bir seçeneğiniz olacak --git-dir: aşağıdaki
cevabıma

Yanıtlar:


189

Kimden man git:

--git-dirHerhangi bir komut iletmeden önce bunu parametre ile yapabilirsiniz .

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

( .gitDizinin belirtilmesi gereklidir.) Dokümantasyondan :

--git-dir=<path>

Bilgi havuzunun yolunu ayarlayın. Bu, GIT_DIRortam değişkenini ayarlayarak da kontrol edilebilir . Geçerli çalışma dizininin mutlak yolu veya göreceli yolu olabilir.


26
.gitDizine başvurmanız gerekir . Deneyin git --git-dir=/foo/bar/.git log.
mipadi

6
üzgünüm, hatam, = --git-dir ve dizin adı arasına koymuyorsunuz. yani git --git-dir / foo / bar log
rgngl

23
Uyarı! Bu yaklaşım dışındaki işlemler için bozulmuştur log. Dene git --git-dir /foo/someclone/.git status- git tamamen karışıyor. -CAşağıda belirtildiği gibi tavsiye ederim .
Hava

"--Git-dir" dizesini içeren bir git yardım sayfasına henüz rastlamadım: '(
thinsoldier

1
@thinsoldier man gitbenim sistemimde yapar (2.3.5). Ancak @VonC yanıtı çok daha iyi çalışıyor.
Calimo

146

İle Git 1.8.5 (Q4 2013) , bunun yerine ayarı, başka bir seçim olacaktır --git-dir. Klasörde
yürütmek istiyorsanız , şunu yazın:git logB

git -C B log

Tıpkı " make -C <directory>", " git -C <directory> ..." Başka bir şey yapmadan önce oraya gitmek Git söyler .


Bkz 44e1e4 taahhüt tarafından Nazri Ramliy :

Git komutunu mevcut dizinden ayrılmadan farklı bir dizinde çağırmak için daha fazla tuşa basılması gerekir:

  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. (cd ../..; git grep foo)
  3. for d in d1 d2 d3; do (cd $d && git svn rebase); done

Yukarıda gösterilen yöntemler komut dosyası oluşturmak için kabul edilebilir ancak hızlı komut satırı çağrıları için çok zahmetlidir.

Bu yeni seçenekle, yukarıdakiler daha az tuş vuruşuyla 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

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

vay, ve man sayfasında hiçbir şey yok! Ne utanç. (tamam, şimdi 2.7 man sayfasında eklendiğini görüyorum)
akostadinov

Ne yazık ki, -Rgöreceli yolları karıştırdığı için bu hala Mercurial'in seçeneği kadar hoş değil . Örneğin, git -C subdir log subdir/myfileyazarsam bir hata veriyor (dosyayı aradığı için subdir/subdir/myfile).
jwd

--git-dir, böyle bir şey yaptığınızda daha kullanışlıdır:for p in (find . -type d -name ".git"); do git --git-dir $p ...; done
shabunc

1
@jwd: Bunun nasıl bir sorun olduğundan emin değilim? Alıntı yaptığınız şey, beklediğim kesin davranıştır ve gitbenden ve yazdıklarımdan daha akıllı olduğunu düşünmek istemem . 'Bunu X dizininde çalıştır' dersem, 'bazen başka bir şey yap' dışında 'demek istemiyorum.
underscore_d
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.