Git komutlarını o havuzda olmadan bir depoda yürütmenin bir yolu var mı?
: Böyle örnek bir şey için git /home/repo log?
Lütfen bana söyleme cd. Bunu bir execarama yoluyla yapıyorum .
Git komutlarını o havuzda olmadan bir depoda yürütmenin bir yolu var mı?
: Böyle örnek bir şey için git /home/repo log?
Lütfen bana söyleme cd. Bunu bir execarama yoluyla yapıyorum .
Yanıtlar:
Deneyin:
git --git-dir=/home/repo/.git log
Deponuzun .git dizinine kadar olan yolu vermek önemlidir. Aksi takdirde, yalnızca aşağıdaki gibi bir şey söyleyen bir hata mesajı alırsınız:
fatal: Not a git repository
fatal: Not a git repository (or any of the parent directories): .git. @Patrick Ben hiçbir şeye oy vermedim?
--work-dirdüşündüğümü söyledi )
git status. -Cgitmek için doğru yoldur.
Şu -Cseçeneği kullanın ( dokümanlar ):
git -C /home/repo log
Bu, normal klasöre hemen hemen eşdeğerdir --git-dirve klasör --work-treeeklenmeden.git
Düzenle:
Cevap olumsuz oylandı ... oldukça şaşırtıcı, çünkü kesinlikle bu soruya verilecek tek doğru cevap. Depoya çalışma ağacının dışından erişmek için seçenekler --git-dirve --work-treemevcut değiller, bunları taşımak için kullanılırlar..git başka bir yere için kullanılıyorlar ve bazı durumlarda kullanımı çok daha karmaşık.
Örneğin, /home/repo/subdiryalnızca günlüğünü almak için :
git -C /home/repo/subdir log .
veya
git -C /home/repo log subdir
Veya log .ile kullanmak mümkün değildir . Yol, alt yolu çalışma ağacının tepesine göre ayıklamak için işlenmelidir ve bu durumda bile, seçeneği kullanmazsanız git bunu bir yol olarak tanımayacaktır , bu nedenle olası tek yol şudur:--git-dir--work-tree--
git --git-dir /home/repo/.git log -- subdir
Ayrıca, benim sürümümle (git 1.9.1) alt komutla --work-treehiç çalışmıyor log. Sadece görmezden gelinir:
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
Bunun bir hata mı yoksa özellik mi olduğunu bile anlamıyorum ... her zamanki gibi git tasarım seçeneklerinde olduğu gibi.
git stashEğer başarısız olan bir alt komutuyla başka bir örneğidir --git-dirve --work-treekullanılır.
Aslında --git-dir ve --work-tree'i birlikte kullanmanız gerekir. İşte bir örnek:
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
Birçok kez denedim! Sonunda anladım!
git -C dir --no-pager log --format='%an' -1 filename
unutmayın, lütfen .git eklemeyin
-C dir
Bu, @ max'ın cevabına benzer. Ne yazık ki, --git-dir ihtiyacım olanı yapmadı. düzenle Geriye dönüp baktığımda, okumamış olduğum başka bir [önceki] yanıt önerildi --work-tree. Çevre veya bayrak kullanmanın daha uygun olup olmadığından emin değilim, bu yüzden birisi kullanım bulması durumunda cevabımı bırakacağım, ancak --work-tree/ kullanımına geçeceğim --git-dir.
Biri diğerinin içinde ancak alt modül olmayan iki depo vardır; dış depo bunu görmezden gelir:
tools (outer repo)
gcc/4.9.2 (inner repo)
İstediğim şey git rev-parse --show-prefix, dış repoya göre çıktıydı. İşte bulduğum şey (bash sözdizimi; okunabilirlik için satırlara bölün):
prefix_dir=$(cd ..; git rev-parse --show-toplevel)
prefix_dir=$(GIT_WORK_TREE=${prefix_dir} git rev-parse --show-prefix)
4.9.2 içinden yürütüldüğünde dizeyi üretir gcc/4.9.2.
Herhangi bir git komutu için şunları yapabilirsiniz:
git --git-dir=<PATH-TO-REPO>/.git --work-tree=<PATH-TO-REPO> <git-command>
Örneğin, git statüsü yapmak istiyorsanız:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ status
veya reponun bulunduğu şubeyi kontrol etmek isterseniz:
git --git-dir=/home/myrepo/.git --work-tree=/home/myrepo/ rev-parse --abbrev-ref HEAD