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

问题描述 投票:1回答:1

我正在按照此说明尝试将现有的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

有人可以告诉我为什么会出现这种差异?

UPDATE

我把这个标签添加到我的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 hereenter image description here

如您所见,所有标签都与上次提交相关

git svn git-svn
1个回答
2
投票

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


UpdatE - 编辑了一个问题,添加了一些有关尝试根据RE* refs添加标签的信息。在这一点上,你似乎真的在问如何为每个refs创建标签;请清楚说明您的实际问题,而不是让我们猜猜您想知道什么。

所以:标签是一个指向数据库中某个对象的引用,它恰好放在refs/tags/名称空间中。按照惯例,这个命名空间中的引用不应该“移动”(如果有的话),它们就会成为它们指向的对象的“名称”。

git tag命令将作为参数的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

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

© www.soinside.com 2019 - 2024. All rights reserved.