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

时间:2012-01-31 19:24:04

标签: git svn bash git-svn

我正在尝试修改我的bash提示符,如果我在git-svn repo中打印出来。我看到git svn repos有一个.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?

2 个答案:

答案 0 :(得分:3)

如果在任何存储库中运行任何.git/svn命令,则可以创建git svn目录 - 例如只需运行git svn infoCarl Norum suggests即可创建它。但是,稍微好一点的测试可能是.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存储库的不同版本的布局:

...所以如果你想小心捕捉所有不同的版本,你可以为所有这些编写测试。

答案 1 :(得分:1)

您应该可以使用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 repo:

Unable to determine upstream SVN information from working tree history