如何判断你是否在 git-svn 存储库命令行中?



如果我在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

最新更新