Gunakan perintah git "log" di folder lain

128

Saya memiliki beberapa file php di Folder A (yang merupakan proyek git). Di file php ini saya ingin menjalankan "git log" tetapi untuk folder B. Folder B adalah proyek git lain (jadi log berbeda antara A dan B).

Bagaimana saya bisa melakukannya dengan perintah shell?

Aurélien B
sumber
3
cd /other/dir && git log && cd -di bash shell?
ambil
1
Dengan git 1.8.5 (Q4 2013), Anda akan memiliki pilihan lain, alih-alih menyetel --git-dir: lihat jawaban saya di bawah
VonC
Kemungkinan duplikat git pull saat tidak ada dalam direktori git
Code-Apprentice

Jawaban:

189

Dari man git,:

Anda dapat melakukan ini dengan --git-dirparameter, sebelum meneruskan perintah apa pun.

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

(Menentukan .gitdirektori diperlukan.) Dari dokumentasi :

--git-dir=<path>

Setel jalur ke repositori. Ini juga dapat dikontrol dengan mengatur GIT_DIRvariabel lingkungan. Ini bisa menjadi jalur absolut atau jalur relatif ke direktori kerja saat ini.

rgngl
sumber
26
Anda harus mengacu pada .gitdirektori. Coba git --git-dir=/foo/bar/.git log.
mipadi
6
maaf, saya salah Anda tidak meletakkan = antara --git-dir dan nama direktori. sehingga menjadi git --git-dir / foo / bar log
rgngl
23
Peringatan! Pendekatan ini rusak untuk operasi selain log. Coba git --git-dir /foo/someclone/.git status- git menjadi sangat bingung. Saya merekomendasikan -Cseperti yang disebutkan di bawah ini.
Air
Saya belum menemukan halaman bantuan git yang menyertakan string "--git-dir": '(
thinsoldier
1
@thinsoldier man gitmelakukannya di sistem saya (2.3.5). Tapi jawaban @VonC bekerja jauh lebih baik.
Calimo
146

Dengan git 1.8.5 (Q4 2013) , Anda memiliki pilihan lain, selain pengaturan --git-dir.
Jika Anda ingin mengeksekusi git logdi folder B, ketik:

git -C B log

Seperti " make -C <directory>", " git -C <directory> ..." menyuruh Git pergi ke sana sebelum melakukan hal lain .


Lihat commit 44e1e4 oleh Nazri Ramliy :

Dibutuhkan lebih banyak penekanan tombol untuk menjalankan perintah git di direktori yang berbeda tanpa meninggalkan direktori saat ini:

  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

Metode yang ditampilkan di atas dapat diterima untuk pembuatan skrip tetapi terlalu rumit untuk pemanggilan baris perintah cepat.

Dengan opsi baru ini, hal di atas dapat dilakukan dengan lebih sedikit penekanan tombol:

  1. git -C ~/foo status
  2. git -C ../.. grep foo
  3. for d in d1 d2 d3; do git -C $d svn rebase; done
VonC
sumber
19
Ini adalah pendekatan yang jauh lebih andal dan berfungsi untuk perintah selain log.
Air
wow, dan tidak ada di halaman manual! Sayang sekali. (ok, sekarang saya melihatnya ditambahkan di halaman manual 2.7)
akostadinov
Sayangnya, ini masih tidak sebaik -Rpilihan Mercurial , karena itu mengacaukan jalur relatif. Misalnya, jika saya mengetik git -C subdir log subdir/myfileitu memberikan kesalahan (karena mencari file subdir/subdir/myfile).
jwd
--git-dir lebih mudah digunakan ketika Anda melakukan sesuatu seperti ini:for p in (find . -type d -name ".git"); do git --git-dir $p ...; done
shabunc
1
@jwd: Saya tidak yakin bagaimana itu menjadi masalah? Apa yang Anda kutip adalah perilaku tepat yang saya harapkan, dan saya tidak ingin gitberpikir itu lebih pintar dari saya dan apa yang saya ketik. Jika saya mengatakan 'jalankan ini di direktori X', saya tidak bermaksud 'kecuali kadang-kadang, lakukan sesuatu yang lain'.
underscore_d