使用 git 子树签出特定标签

checkout a specific tag with git subtree

我可以在子树中使用标签吗?关注特定问题:

我有一个 git 存储库,其中包含一个外部存储库作为子树。 我可以添加这个外部存储库并从这个存储库中检出一个特定的分支。使用 git subtree pull --prefix=<dir> --squash <remote> <branch> 所选分支的更新效果很好。

现在可以签出特定标签了吗?我在子树中找不到有关标签的一些信息...

实际上任何参考都应该有效。子树的手册页显示了这一点。

git subtree pull  -P <prefix> <repository> <ref>

其中 <ref> 可以是 SHA、标记或分支。基本上任何 git 都可以解析为提交。

git subtree pull --prefix repository ref --squash 如果你最初使用的是 squash。我在第一次拉动后用一个标签代替没有压扁的 ref 并得到 fatal: refusing to merge unrelated histories as the original pull had squash.

我找不到在特定标签或分支上检查我的子树的方法,使用:

git subtree pull --prefix=my_subtree_dir my_remote tags/my_tag

我得到以下日志:

From ../remotes_dir/my_remote
* tag               my_tag     -> FETCH_HEAD
Already up-to-date.

但实际上,什么也没做!没有一个文件是 "checkout".

我设法解决了这个问题,方法是 git 删除我的子树文件并从我的远程存储库中再次读取它们:

git rm -r lib3dsp
git read-tree --prefix=lib3dsp/ -u tags/my_tag

这是我配置子树的方式:

git remote add <my_remote>
git fetch <my_remote>
git merge -sours --no-commit <my_remote>/master
git read-tree --prefix=<my_subtree_dir> -u <my_remote>/master
git commit -m "merge <my_subtree> repo"