他们说
git-subtree存储子项目提交ID而不是元数据中的引用。
这意味着命令
git subtree add --prefix some-split-sub-directory https://some-other-repo-url master --squash
会将主HEAD的SHA-1存储在由{git管理的元数据信息中某处的https://some-other-repo-url
。
现在我下次运行以下命令时
git subtree pull --prefix some-split-sub-directory https://some-other-repo-url master --squash
git知道在根目录/父项目上合并的URL https://some-other-repo-url
上的最后一次提交的SHA-1,现在它获取/合并代码/提交超出最后提交的SHA-1。< / p>
现在我的问题是本地.git
文件夹中存储的last-commit-of-subtree的信息在哪里?
我怎么能看到它对这个repo这是最后一次提交的SHA-1存储以及上面/下面的下一次拉/合并将会发生?
我偷看了以下地方,例如.git / config,.git / refs,但没有找到任何信息。
答案 0 :(得分:0)
我也无法在 .git 文件夹中找到它,但我设法使用以下函数获取它: https://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh
AFAICT 它会解析 git 历史以获得最新的相关子树壁球:
find_latest_squash () {
debug "Looking for latest squash ($dir)..."
dir="$1"
sq=
main=
sub=
git log --grep="^git-subtree-dir: $dir/*\$" \
--no-show-signature --pretty=format:'START %H%n%s%n%n%b%nEND%n' HEAD |
while read a b junk
do
debug "$a $b $junk"
debug "{{$sq/$main/$sub}}"
case "$a" in
START)
sq="$b"
;;
git-subtree-mainline:)
main="$b"
;;
git-subtree-split:)
sub="$(git rev-parse "$b^0")" ||
die "could not rev-parse split hash $b from commit $sq"
;;
END)
if test -n "$sub"
then
if test -n "$main"
then
# a rejoin commit?
# Pretend its sub was a squash.
sq="$sub"
fi
debug "Squash found: $sq $sub"
echo "$sq" "$sub"
break
fi
sq=
main=
sub=
;;
esac
done
}