Tidak bisakah Anda hanya "cd / home / repo && git log" sebagai panggilan eksekutif Anda?
Alex Howansky
Saya punya masalah aneh dengannya. Saya memulai proses baru, sebenarnya bukan seorang eksekutif, tapi saya tidak tahu banyak perbedaannya. Saya merasa lebih mudah untuk hanya mencari parameter untuk menentukan direktori git.
Penting untuk memberikan jalur hingga direktori .git dari repositori Anda. Jika tidak, Anda hanya akan mendapatkan pesan kesalahan yang mengatakan sesuatu seperti:
Saya terus mendapatkan fatal: Not a git repository (or any of the parent directories): .git. @Patrick Saya tidak menjatuhkan suara apa pun?
Menara
3
@Patrick Jawabannya diedit (awalnya mengatakan --work-dirsaya pikir)
Gareth
1
Ini tidak berhasil untuk saya, karena ini menunjukkan semua file dari komit sebagai dihapus. Sepertinya itu memeriksa komit tetapi bukan konten foldernya. Lihat jawaban @calandoa untuk performa yang lebih baik.
mxcd
2
Tidak berhasil untuk saya yang menggunakan git terbaru, namun menggunakan opsi -C berhasil, contoh: git -C /home/repo/.git log
D. Snap
1
ini sebenarnya tidak bekerja seperti yang diharapkan po. mengapa ini adalah jawaban yang diterima? Ini akan menggunakan dir saat ini sebagai pohon kerja dan menggunakan .git yang ditentukan untuk riwayat, yang sepenuhnya salah. Jika Anda tidak hanya menampilkan log, misalnya git status,. -Cadalah cara yang benar untuk pergi.
Ini hampir sama dengan --git-dirdan --work-treetanpa menambahkan .gitfolder biasa
Edit:
Jawaban tidak disukai ... cukup luar biasa, karena, sebenarnya, ini adalah satu-satunya jawaban yang benar untuk pertanyaan tersebut. Opsi --git-dirdan --work-treetidak ada untuk mengakses repositori dari luar pohon kerja, mereka digunakan untuk pindah ke .gittempat lain, dan mereka jauh lebih rumit untuk digunakan dalam beberapa kasus.
Misalnya, untuk mendapatkan log /home/repo/subdirhanya:
git -C /home/repo/subdir log .
atau
git -C /home/repo log subdir
Tidak mungkin digunakan log .dengan --git-diratau --work-tree. Path harus diproses untuk mengekstrak subpath yang berhubungan dengan bagian atas work tree, dan bahkan dalam kasus tersebut, git tidak akan mengenalinya sebagai path jika Anda tidak menggunakan --opsi tersebut, jadi satu-satunya cara yang mungkin adalah:
git --git-dir /home/repo/.git log -- subdir
Selain itu, --work-treetidak berfungsi sama sekali dengan logsubperintah dengan versi saya (git 1.9.1). Itu hanya diabaikan:
Terima kasih telah menambahkan penjelasan tambahan.
Erick G. Hagstrom
git stashadalah contoh lain dari subperintah yang gagal jika --git-dirdan --work-treedigunakan.
d5ve
4
Opsi -C ditambahkan di versi 1.8.5 dari git, yang dirilis pada 2013.
d5ve
-C bekerja lebih baik daripada --git-dir untuk saya ... -C menghormati pengaturan konfigurasi git untuk repo. Saya menjalankan git versi 1.9.5.msysgit.1
Straff
@calandoa apakah kita selalu perlu menentukan lokasi dari root, satu hal lagi jika nama repo mengandung banyak kata bagaimana kita memasukkan kode ini
Kasun Siyambalapitiya
17
Sebenarnya Anda perlu menggunakan --git-dir dan --work-tree secara bersamaan. Berikut ini contohnya:
local [] Desktop: mkdir git
local [] Desktop: cd git
local [] git: touch README.txt
local [] git: git init
Initialized empty Git repository in /Users/albert/Desktop/git/.git/
local [] git: cd ..
local [] Desktop: git --work-tree=git --git-dir=git/.git add .
local [] Desktop: git --work-tree=git --git-dir=git/.git commit -a -m 'initial commit, called from outside the git directory'
[master (root-commit) ee951b1] initial commit, called from outside the git directory
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.txt
local [] Desktop: cd git
local [] git: git log --pretty=oneline
ee951b161053e0e0948f9e2a36bfbb60f9c87abe initial commit, called from outside the git di
Ini mirip dengan jawaban @ max. Sayangnya, --git-dir tidak melakukan apa yang saya butuhkan. edit Dalam retrospeksi, jawaban [sebelumnya] lain yang belum saya baca menyarankan penggunaan --work-tree. Saya tidak yakin apakah menggunakan lingkungan atau bendera lebih tepat, jadi saya akan meninggalkan jawaban saya jika seseorang menemukan menggunakannya, tetapi saya akan beralih ke use --work-tree/ --git-dir.
Ada dua repo, satu di dalam yang lain tetapi bukan submodul; repo luar mengabaikannya:
tools (outer repo)
gcc/4.9.2 (inner repo)
Yang saya inginkan adalah keluaran git rev-parse --show-prefixrelatif terhadap repo luar. Inilah yang saya dapatkan (sintaks bash; terbagi menjadi beberapa baris agar mudah dibaca):
Jawaban:
Mencoba:
Penting untuk memberikan jalur hingga direktori .git dari repositori Anda. Jika tidak, Anda hanya akan mendapatkan pesan kesalahan yang mengatakan sesuatu seperti:
sumber
fatal: Not a git repository (or any of the parent directories): .git
. @Patrick Saya tidak menjatuhkan suara apa pun?--work-dir
saya pikir)git status
,.-C
adalah cara yang benar untuk pergi.Gunakan
-C
opsi ( dokumen ):Ini hampir sama dengan
--git-dir
dan--work-tree
tanpa menambahkan.git
folder biasaEdit:
Jawaban tidak disukai ... cukup luar biasa, karena, sebenarnya, ini adalah satu-satunya jawaban yang benar untuk pertanyaan tersebut. Opsi
--git-dir
dan--work-tree
tidak ada untuk mengakses repositori dari luar pohon kerja, mereka digunakan untuk pindah ke.git
tempat lain, dan mereka jauh lebih rumit untuk digunakan dalam beberapa kasus.Misalnya, untuk mendapatkan log
/home/repo/subdir
hanya:atau
Tidak mungkin digunakan
log .
dengan--git-dir
atau--work-tree
. Path harus diproses untuk mengekstrak subpath yang berhubungan dengan bagian atas work tree, dan bahkan dalam kasus tersebut, git tidak akan mengenalinya sebagai path jika Anda tidak menggunakan--
opsi tersebut, jadi satu-satunya cara yang mungkin adalah:Selain itu,
--work-tree
tidak berfungsi sama sekali denganlog
subperintah dengan versi saya (git 1.9.1). Itu hanya diabaikan:Saya bahkan tidak mengerti apakah ini bug atau fitur ... seperti biasa dengan banyak pilihan desain git.
sumber
git stash
adalah contoh lain dari subperintah yang gagal jika--git-dir
dan--work-tree
digunakan.Sebenarnya Anda perlu menggunakan --git-dir dan --work-tree secara bersamaan. Berikut ini contohnya:
sumber
Saya sudah mencoba berkali-kali! Saya akhirnya mendapatkannya!
git -C dir --no-pager log --format='%an' -1 filename
ingat, jangan menambahkan .git ke
sumber
Ini mirip dengan jawaban @ max. Sayangnya, --git-dir tidak melakukan apa yang saya butuhkan. edit Dalam retrospeksi, jawaban [sebelumnya] lain yang belum saya baca menyarankan penggunaan
--work-tree
. Saya tidak yakin apakah menggunakan lingkungan atau bendera lebih tepat, jadi saya akan meninggalkan jawaban saya jika seseorang menemukan menggunakannya, tetapi saya akan beralih ke use--work-tree
/--git-dir
.Ada dua repo, satu di dalam yang lain tetapi bukan submodul; repo luar mengabaikannya:
Yang saya inginkan adalah keluaran
git rev-parse --show-prefix
relatif terhadap repo luar. Inilah yang saya dapatkan (sintaks bash; terbagi menjadi beberapa baris agar mudah dibaca):Ketika dijalankan dari dalam 4.9.2 itu menghasilkan string
gcc/4.9.2
.sumber
Untuk perintah git apa pun, Anda dapat melakukan:
Misalnya, jika Anda ingin melakukan status git:
atau jika Anda ingin memeriksa cabang tempat repo berada:
sumber