使用 svn,我可以在结账时对文件运行命令,而无需cd
首先进入结帐处。例如:
# Located in /tmp, running svn operation on /home/d5ve/checkout
d5ve@host:/tmp> svn add /home/d5ve/checkout/myfile.txt
d5ve@host:/tmp> svn diff /home/d5ve/checkout/myfile.txt
d5ve@host:/tmp> svn commit /home/d5ve/checkout/myfile.txt
当我使用 git 尝试此工作流程时,出现错误:
# Located in /tmp, attempting git operation on /home/d5ve/checkout2
d5ve@host:/tmp> git add /home/d5ve/checkout2/myfile.txt
fatal: Not a git repository (or any of the parent directories): .git
我尝试过使用--git-dir
and --work-tree
标志,但这似乎也失败了。
git 人们有什么建议吗?我经常使用这个工作流程,并且在使用 git 时真的很怀念它。
2016年更新当前正确的答案是使用-C
flag 到 git,它是在 2013 年的 1.8.5 版本中引入的。参见https://stackoverflow.com/a/35899275/357336 https://stackoverflow.com/a/35899275/357336
UPDATE:根据下面的lunaryorn答案,我创建了一个简单的perl脚本,它从文件路径中计算出.git目录的位置,并为命令设置GIT_WORK_TREE和GIT_DIR环境变量。
请看一下:http://github.com/d5ve/rgit http://github.com/d5ve/rgit
用法:rgit 命令 [ARGS]
基本上只需更换git with rgit在命令中,您可以从存储库外部运行命令。
cd /tmp
rgit diff /home/d5ve/checkout1
rgit add /home/d5ve/checkout1/rgit.pl
rgit commit /home/d5ve/checkout1/