Apakah ada cara untuk menjalankan perintah Git pada repositori tanpa berada di repositori itu?
Misalnya kira-kira seperti ini git /home/repo log:?
Tolong jangan beritahu saya cduntuk itu. Saya melakukan ini melalui exectelepon.
Apakah ada cara untuk menjalankan perintah Git pada repositori tanpa berada di repositori itu?
Misalnya kira-kira seperti ini git /home/repo log:?
Tolong jangan beritahu saya cduntuk itu. Saya melakukan ini melalui exectelepon.
Jawaban:
Mencoba:
git --git-dir=/home/repo/.git log
Penting untuk memberikan jalur hingga direktori .git dari repositori Anda. Jika tidak, Anda hanya akan mendapatkan pesan kesalahan yang mengatakan sesuatu seperti:
fatal: Not a git repository
fatal: Not a git repository (or any of the parent directories): .git. @Patrick Saya tidak menjatuhkan suara apa pun?
--work-dirsaya pikir)
git status,. -Cadalah cara yang benar untuk pergi.
Gunakan -Copsi ( dokumen ):
git -C /home/repo log
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:
git --git-dir /home/repo/.git --work-tree /home/repo/subdir log -- subdir
git --git-dir /home/repo/.git --work-tree /home/repo/whatever log -- subdir
Saya bahkan tidak mengerti apakah ini bug atau fitur ... seperti biasa dengan banyak pilihan desain git.
git stashadalah contoh lain dari subperintah yang gagal jika --git-dirdan --work-treedigunakan.
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
Saya sudah mencoba berkali-kali! Saya akhirnya mendapatkannya!
git -C dir --no-pager log --format='%an' -1 filename
ingat, jangan menambahkan .git ke
-C dir
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):
prefix_dir=$(cd ..; git rev-parse --show-toplevel)
prefix_dir=$(GIT_WORK_TREE=${prefix_dir} git rev-parse --show-prefix)
Ketika dijalankan dari dalam 4.9.2 itu menghasilkan string gcc/4.9.2 .
Untuk perintah git apa pun, Anda dapat melakukan:
git --git-dir=<PATH-TO-REPO>/.git --work-tree=<PATH-TO-REPO> <git-command>
Misalnya, jika Anda ingin melakukan status git:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ status
atau jika Anda ingin memeriksa cabang tempat repo berada:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ rev-parse --abbrev-ref HEAD