如果我在git-svn-reo中,我正试图修改我的bash提示以打印出来。我看到git-svn-reos有一个.git/svn文件夹,所以我可以用检查
# Find the top level git folder
_git_dir=`git rev-parse --show-toplevel 2> /dev/null`
# Find svn folder
_gsvn_check=`cd $_git_dir; ls .git/svn 2> /dev/null`
但后来我注意到我的普通git repo有一个.git/svn文件夹。有什么方法可以确定你在git-svn吗?
如果您在任何存储库中运行任何git svn
命令,就可以创建.git/svn
目录,例如,正如Carl Norum所建议的,只运行git svn info
就会创建它。然而,一个稍微好一点的测试可能是.git/svn
存在并且不是空的,例如
[ -d .git/svn ] && [ x != x"$(ls -A .git/svn/)" ] && echo Looks like git-svn
如果你想要一个更严格的测试,你可以查看HEAD
的历史记录,寻找任何包含git-svn-id
的提交消息——本质上,git svn info
在放弃之前就是这么做的。例如:
[ x != x"$(git log -n 1 --grep='^s*git-svn-id' --oneline)" ] && echo "git-svn!"
但对于您的用例来说,这听起来可能太慢了。
git-svn.perl
中的源代码描述了不同版本的git-svn
存储库的布局:
- https://github.com/git/git/blob/master/git-svn.perl#L6433
因此,如果你想小心地捕捉所有不同的版本,你可以为所有这些编写测试。
您应该能够使用git svn info
。git-svn存储库的输出示例:
Path: .
URL: svn+ssh://url/path/to/something/trunk
Repository Root: svn+ssh://path/to/something
Repository UUID: c22683c8-8Bcb-47f9-aeb8-1c337d8f7a2d
Revision: 12345
Node Kind: directory
Schedule: normal
Last Changed Author: somebody
Last Changed Rev: 12345
Last Changed Date: 2012-01-24 16:38:36 -0800 (Tue, 24 Jan 2012)
对于常规的git回购:
Unable to determine upstream SVN information from working tree history