我正在尝试从与我不同的目录运行git。例如,如果我在:
cd /home/domain/
git status << runs perfect ie
# On branch master
# Your branch is ahead of 'origin/master' by 6 commits.
所以现在我想使用--git-dir
选项从不同的目录运行此命令。
让我说我在root/
并试试这个:
git --git-dir="/home/domain/" status
## Error
fatal: Not a git repository: '/home/domain/'
我还尝试包含.git
文件夹,即
git --git-dir="/home/domain/.git/" status
但是这看起来好像是试图从root运行git,即从我的域文件夹中删除所有内容并在root中添加所有内容。
希望有人可以就我做错的事情提出建议。
答案 0 :(得分:286)
答案 1 :(得分:121)
开始git 1.8.5(应该在下周出来),它会更简单:
git -C "/home/domain/" status
无需再设置--git-dir
和--work-tree
!
通过 commit 44e1e4 :
查看Nazri Ramliy在不离开当前目录的情况下,需要更多的按键才能在不同的目录中调用git命令:
(cd ~/foo && git status)
git --git-dir=~/foo/.git --work-dir=~/foo status
GIT_DIR=~/foo/.git GIT_WORK_TREE=~/foo git status(cd ../..; git grep foo)
- 醇>
for d in d1 d2 d3; do (cd $d && git svn rebase); done
上面显示的方法对于脚本编写是可以接受的,但对于快速命令行调用来说太麻烦了。
使用这个新选项,可以用更少的击键来完成上述操作:
git -C ~/foo status
git -C ../.. grep foo
- 醇>
for d in d1 d2 d3; do git -C $d svn rebase; done
答案 2 :(得分:40)
根据您上面的评论,听起来您仍然遇到问题:
root@erx [/]# git --git-dir=/home/domain/.git --work-tree=/home/domain/ pull origin master fatal: /usr/local/libexec/git-core/git-pull cannot be used without a working tree
听起来你可能打算从crontab
或其他东西运行它。最好先使用cd
切换到工作目录。例如:
root@erx [/]# (cd /home/domain && git pull origin master)
这将暂时(在子shell中,这是括号所做的)将当前目录更改为/home/domain
,然后运行git pull origin master
。命令完成后,您当前的目录将保持命令之前的状态。
答案 3 :(得分:1)
git --git-dir="/home/domain/" status
## Error
fatal: Not a git repository: '/home/domain/'
使用Git 2.26(2020年第一季度),文档更加清晰。
(使用环境变量或使用“ GIT_DIR
”选项)指定git --git-dir=<where> cmd
在何处的效果是禁用存储库发现。
由于新用户经常会感到困惑,这在文档中增加了一些压力。
请参见commit d82ad54的Heba Waly (HebaWaly
)(2020年1月30日)。
(由Junio C Hamano -- gitster
--在commit 17e4a1b中合并,2020年2月12日)
git
:更新--git-dir的文档签名人:Heba Waly
帮助者:Junio C Hamano
git --git-dir <path>
有点令人困惑,有时无法按用户期望的那样工作。例如,如果用户运行
git --git-dir=<path> status
,除非另有说明,否则git将跳过存储库发现算法,并将工作树分配给用户的当前工作目录。
如果此分配错误,则输出将不符合用户的期望。此补丁更新了文档,使其更加清晰。
所以documentation for git --git-dir
现在包括:
--git-dir=<path>:
设置存储库的路径(“
.git
”目录)。
也可以通过设置GIT_DIR
环境变量来控制。
它可以是当前工作目录的绝对路径或相对路径。使用此选项(或
.git
环境变量)指定“GIT_DIR
”目录的位置会关闭试图用“ { {1}}”子目录(这是发现存储库和工作树的顶层的方式),并告诉Git您位于工作树的顶层。如果您不在工作树的顶层目录中,则应使用
.git
选项(或--work-tree=<path>
环境变量)告诉Git工作树的顶层位置在哪里。 )