我有一个大型项目的脚本,十个存储库,用于检出分支(本地,远程或标记)并最终显示每个存储库中每个存储库的当前分支.
我git branch用来显示当前存储库中签出的分支或标记.这在大多数情况下都可以正常工作,除非在同一个提交中有多个标记,导致在该提交中打印一个随机标记.
我怎样才能解决这个问题?我应该以不同的方式实现它吗?
例
for repo in ...
do
cd repo
git checkout $1 || git checkout $2 || git checkout $3 ....
git branch ##(to verify what happened)
done
Run Code Online (Sandbox Code Playgroud)
所以,让我说我运行./checkoutAll feat1 origin/feat1 tags/ALL7
但是ALL7标签与同一个提交ALL6,
git branch显示ALL6而不是ALL7我特别要求结帐.
编辑:下面的图片是为了帮助那些试图帮助我的人,
所以,让我说我运行git checkout tags/V9.00.00.ALL.04
然后git branch显示一个随机标签(* detached from ..)的存在,在这个例子中7.有没有办法显示最新的?或至少显示我要求结账的那个(即使ALL7与ALL9相同)?
目前尚不清楚您想在哪里显示这些标签,但让我尽力帮助您。
首先,让我们找到当前分支的最新提交哈希:
git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)
然后,让我们找到所有标签:
git show-ref --tags --dereference
Run Code Online (Sandbox Code Playgroud)
现在我们都拥有了,我们可以将它们匹配以打印/显示您所要求的内容。例如:
SHA_HEAD=$(git rev-parse HEAD)
ALL_TAGS=$(git show-ref --tags --dereference)
echo "$ALL_TAGS" | awk '/'$SHA_HEAD' refs\/tags\// { print $2 }' | tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
或者单行:
git show-ref --tags --dereference | awk '/'$(git rev-parse HEAD)' refs\/tags\// { print $2 }' | tr '\n' ' '
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2215 次 |
| 最近记录: |