使用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
Run Code Online (Sandbox Code Playgroud)
当我使用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
Run Code Online (Sandbox Code Playgroud)
我尝试过使用--git-dir和--work-tree标志,但这似乎也失败了.
任何建议git人?我经常使用这个工作流程,并且在使用git时非常想念它.
更新2016目前正确的答案是使用-Cgit标志,这是在2013年版本1.8.5中引入的.请参阅/sf/answers/2512949281/
更新:基于下面的lunaryorn答案,我创建了一个简单的perl脚本,它从文件路径中计算出.git目录的位置,并为命令设置GIT_WORK_TREE和GIT_DIR环境变量.
请查看:http://github.com/d5ve/rgit
用法:rgit COMMAND [ARGS]
基本上只需在命令中用rgit替换git,就可以从存储库外部运行命令.
cd /tmp
rgit diff /home/d5ve/checkout1
rgit add /home/d5ve/checkout1/rgit.pl
rgit commit /home/d5ve/checkout1/
Run Code Online (Sandbox Code Playgroud)
lun*_*orn 15
您必须同时使用这两个选项:
git --git-dir=/home/d5ve/checkout2/.git --work-tree=/home/d5ve/checkout2/ add /home/d5ve/checkout2/myfile.txt
Run Code Online (Sandbox Code Playgroud)
注意,这--git-dir不是指包含工作副本的目录,而是.git指包含存储库本身的子目录.git提供了两个环境变量来为会话永久设置这些选项:
export GIT_WORK_TREE="/home/d5ve/checkout2"
export GIT_DIR="${GIT_WORK_TREE}/.git"
git status
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2564 次 |
| 最近记录: |