29

リモートリポジトリにタグがある場合、プルすると通常自動的に取得されます。作成したローカルタグ(git tag -d <tag-name>)を削除してプルすると、削除したタグが再作成されます。リモートブランチ/タグ()を削除できますが、リモートタグをフェッチしてローカルタグが作成されたgit push <remote-branch/tag-name>:<branch/tag-name>ことをどのように検出できますか?

4

3 に答える 3

30

実行時にこれらのタグが再作成されることに悩まされている場合は、 remote。<remote-name>.tagoptconfig設定git pullを使用してデフォルトでタグのフェッチをオフにします。たとえば、リモコンがの場合、次のことができます。origin

git config remote.origin.tagopt --no-tags

更新:あなたのコメントに対処するために、これを提案する理由は、ローカルで作成されたタグとリモートからフェッチされたタグの違いを明確に区別する方法がないためです。reflogタグもありません。したがって、私の提案は、タグの自動フェッチを抑制することです。その後、タグを別の名前空間に自分でフェッチできます。たとえば、次のことができます。

git fetch origin +refs/tags/*:refs/tags/origin/*

...そしておそらくそのためのエイリアスを作成します。次に、タグをフェッチする場合、たとえば、のrefs/tags/origin/tag1代わりに名前が付けられますrefs/tags/tag1


これを自動的に実行したい場合は.git/config、フェッチする複数のrefspecをリストするように変更できます。例:

 [remote "origin"]
      url = whoever@whereever:whatever.git
      fetch = +refs/heads/*:refs/remotes/origin/*
      fetch = +refs/tags/*:refs/tags/origin/*

...これはProGitで提案されています。

于 2011-03-31T07:37:16.777 に答える
10

タグは「ローカル」または「リモート」ではありません。コミットに関連付けられており、リモート名前空間のブランチを含む複数のブランチの一部にすることができます。

タグによって参照されるコミットのタグSHA1を取得します

git show -s 'TAG_NAME^{commit}' --format='%H'

、および実行:

git branch -a --contains SHA1

あなたが見たら

 remotes/aRemoteRepoName/aBranch

タグがリモートリポジトリからフェッチしたコミットを参照していることを知っています。

クリスが言及するように:

git branch -a --contains TAGNAME

タグを逆参照し、一度に答えを出します。

于 2011-03-31T07:25:56.247 に答える
1

現在リモートリポジトリにアクセスできる限り、次の結果を比較できます。

git ls-remote --tags

git show-ref --tags -d

ノート:

  • リモートは現在利用可能である必要があります
  • タグがリモートから削除された場合、「ローカル」タグが元々リモートからプルされたことがわかりません。
  • これにより、リモートとローカルのタグ名が同じであるが、異なるコミットを参照しているか、個別に作成/更新されているかを確認できます(注釈付きタグの場合、コミットハッシュが同じであってもタグハッシュは異なります)
于 2021-08-26T18:04:05.307 に答える