我是 shell 脚本新手,无法弄清楚这一点。如果您不熟悉,命令 gitbranch 返回类似的内容
* develop
master
,其中星号标记当前签出的分支。当我在终端中运行以下命令时:
git branch | grep "*"
I get:
* develop
正如预期的那样。
然而,当我跑步时
test=$(git branch | grep "*")
or
test=`git branch | grep "*"`
And then
echo $test
,结果只是目录中的文件列表。我们如何使test=“*develop”的值?
然后下一步(一旦我们将“*development”放入名为 test 的变量中),就是获取子字符串。难道就只有下面这个吗?
currentBranch=${test:2}
我正在使用该子字符串函数,并且经常出现“错误替换”错误,但不知道为什么。
扩展于努法尔·易卜拉欣的回答 https://stackoverflow.com/a/2111192/3303195, 使用--short
标志与git-symbolic-ref
,无需大惊小怪sed
.
我一直在钩子中使用类似的东西并且效果很好:
#!/bin/bash
branch=$(git symbolic-ref --short HEAD)
echo
echo "**** Running post-commit hook from branch $branch"
echo
输出“**** 从分支主机运行提交后挂钩”
注意git-symbolic-ref
仅当您位于存储库中时才有效。幸运的是.git/HEAD
,作为 Git 早期的遗留物,包含相同的符号引用。如果你想获取多个 git 存储库的活动分支,而不遍历目录,你可以使用 bash 单行代码,如下所示:
for repo in */.git; do branch=$(cat $repo/HEAD); echo ${repo%/.git} : ${branch##*/}; done
输出如下:
repo1 : master
repo2 : dev
repo3 : issue12
如果您想更进一步,完整的参考包含在.git/HEAD
也是包含分支上次提交的 SHA-1 哈希值的文件的相对路径。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)