git for-each-ref与标签的实际数量不匹配

时间:2018-08-29 11:15:18

标签: git svn git-svn

我正在按照此说明尝试将现有的svn存储库迁移到git。 https://john.albin.net/git/convert-subversion-to-git

我使用命令克隆了存储库

git svn clone https://urltorepository.com/svn/repos-itservices/apps --no-metadata --authors-file=authors.txt --stdlayout testing

当我做git for-each-ref时,我会得到以下提示:

f98b1954059631270b44ed3037d3d08127ab051a commit refs/remotes/tags/RE.15.03.00.00
181a447b465c34857c1091b06173d30f467c9941 commit refs/remotes/tags/RE.15.03.00.01
cfca76149b8f79749ef0e978b3628fdcf43955d0 commit refs/remotes/tags/RE.15.04.00.00
bc19d96df3a95ae82368ac2083dc1cb77b39a2e9 commit refs/remotes/tags/RE.15.05.00.00
9cdf10ed94bcd5f88f121cb7977da79551918a7f commit refs/remotes/tags/RE.15.11.00.00
3d51a5ca903965b6043744c4995b3c17268c516b commit refs/remotes/tags/RE.16.03.00.00
83e65bbc68435b5622691acbaeba7e575bed08e4 commit refs/remotes/tags/RE.16.04.00.00
281e7aab7adc0d73fc678a39524cd8b64130fdfa commit refs/remotes/tags/RE.16.05.00.00
...
...
0cbf2d48633b5c8d691bf4b93208f02de0cd94fa commit refs/remotes/tags/RE.17.11.00.00
b57de4c3bc4caf4c77f2deb5eb10121193d39122 commit refs/remotes/tags/RE.17.11.10.00
1be3ba34cc0c0f556f972c6407605b560ad32f57 commit refs/remotes/tags/RE.18.01.00.00
56199738b9b4c523c7fc5daf00a3b7bd111f34f7 commit refs/remotes/tags/RE.18.02.00.00_IRIS-MIG
436823909e35cc78813042e1a2181048628e006d commit refs/remotes/tags/RE.18.03.00.00
f4edf4871858f180de3bae7c6dd04d1281e7a0f0 commit refs/remotes/tags/RE.18.03.00.00_ROLLBACK
4e38260f293ceb77281f0f87bd5816b48d0df174 commit refs/remotes/tags/RE.18.04.00.00
fcd58a4f0abf1b8dbb7d9edc846a831b964b09e4 commit refs/remotes/tags/RE.18.05.00.00
4e8936901052fd84804c7587cdb9c21ab980fc0e commit refs/remotes/tags/RE.18.06.00.00
18d443117221769ebccd42a1b22b06e039984c81 commit refs/remotes/tags/RE.18.08.00.00
8bfcb5f9c0b8d27f84e00ed5a2c4574cf726b357 commit refs/remotes/tags/RE18.06.00.00
6bb64c124aa47361c1fb951e6f6132ca09900b3f commit refs/remotes/tags/backup
b84d777d172d56bb43a18f9216cdfd48715cc76f commit refs/remotes/tags/backup@15657
a071ef00e51484338d1d8ee378f63a891d5e327b commit refs/remotes/tags/mod-security-2.2.7-test
5b0bd14307822551d65f1eabf06a229ac80cb0f2 commit refs/remotes/tags/mod-security2.2.7-testing
80b983c042b9ce5ce4c4b79fe02f1e4dec4785c5 commit refs/remotes/tags/package
568bf833abe733ebed65a0f2274826745c1c20bd commit refs/remotes/tags/package@15657
67155be3306148cc726711ec69092af4eba10845 commit refs/remotes/tags/props
f14622fc103a2c6ad1836c8a5d747f13936f5f7a commit refs/remotes/tags/props@15657
2c44a37dd69f45c58aabca388266232cfbbf108a commit refs/remotes/tags/rp
720d43aba7666cd9727d049dc3e04bc9827e4523 commit refs/remotes/tags/rp@15657
6bb64c124aa47361c1fb951e6f6132ca09900b3f commit refs/remotes/tags/tmp
b84d777d172d56bb43a18f9216cdfd48715cc76f commit refs/remotes/tags/tmp@15657
12d372c97e17f10ec5daba08debaf3e0fa887356 commit refs/remotes/trunk

但是当我检查该文件夹时,我只看到了几个标签

$> ls -a .git/refs/remotes/tags/
.   RE.17.08.00.00  RE.17.11.10.00  RE.18.01.00.01  RE.18.02.00.00_IRIS-MIG  RE.18.03.00.00_ROLLBACK  RE.18.05.00.00  RE18.06.00.00
..  RE.17.10.00.00  RE.18.01.00.00  RE.18.02.00.00  RE.18.03.00.00           RE.18.04.00.00           RE.18.06.00.00  RE.18.08.00.00

有人可以告诉我为什么会有这种区别吗?

更新

我将此标签添加到了我的git中,然后进行了git push --tag

$> git for-each-ref --format='%(refname)' refs/remotes/tags | egrep "RE*" | cut -d / -f 4- | while read ref; do git tag -a "$ref" -m "$ref"; done
$> git tag
RE.12.04.00.00
RE.12.05.00.00
RE.12.06.00.00
RE.12.07.00.00
...
...
RE.18.02.00.00
RE.18.02.00.00_IRIS-MIG
RE.18.03.00.00
RE.18.03.00.00_ROLLBACK
RE.18.04.00.00
RE.18.05.00.00
RE.18.06.00.00
RE.18.08.00.00
RE18.06.00.00

然后在我的git存储库中,我有以下内容:

enter image description here enter image description here

您可以看到所有标签都与上一次提交有关

1 个答案:

答案 0 :(得分:2)

引用(例如标签)可以作为单独文件存储在.git/refs/**中,也可以作为“打包引用”存储在单个文件`.git / packed-refs


UpdatE -已对问题进行了编辑,以添加一些有关尝试基于RE*引用添加 tags 的信息。此时,您似乎正在真的询问如何为每个引用创建标签;请清楚地说明您的实际问题,而不是让我们猜测您想知道什么。

因此:标签是指向数据库中某个对象的引用,并且恰好位于refs/tags/名称空间中。按照惯例,此命名空间中的引用不应“四处移动”(即使有的话也是如此),它们将成为它们指向的对象的“名称”。

git tag命令将ref应该指向的对象的ID或解析为该表达式的表达式作为参数。您没有给出该参数,因此它带有默认值-HEAD(现在已签出的提交)。

(由于所使用的参数顺序,您似乎省略了目标似乎并不明显。但是您给出的是一个-a选项,然后是标记名,然后是-m选项带有与标签名称匹配的注释。)

代替

git for-each-ref --format='%(refname)' refs/remotes/tags | egrep "RE*" | cut -d / -f 4- | while read ref; do git tag -a "$ref" -m "$ref"; done

您可以尝试

git for-each-ref --format='%(refname)' refs/remotes/tags | egrep "RE*" | cut -d / -f 4- | while read ref; do git tag -a -m "$ref" "$ref" "refs/remotes/tags/$ref"; done

(请注意,因为您正在创建带注释的标签,所以引用实际上会指向一个新的TAG对象,该对象会指向正确的提交。这是正常的,但是请注意,引用似乎不会指向您可能期望的ID。)