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.