1. ホーム
  2. git

gitで、リモートサーバに対してタグを同期させるにはどうしたらいいですか?

2023-09-21 14:13:03

質問

ローカルの git タグをリモートのタグと同期させる方法はありますか?つまり -- 作成時に新しいタグを取得するだけでなく(通常通り fetch -ing/ pull -ing) だけでなく、リモートで不要になったタグを整理したり、他の人が git push -f のタグを削除します。 私が知っているのは git fetch remotename の後に git remote prune remotename を追加することで、ブランチに対して同様の動作をさせることができます。

どのように解決するのですか?

...また、リモートではもはやないタグをプルーンする

git fetch は、Git 2.17 (Q2 2018)で取得した、ローカルに保持されている古いタグを取り除くための便利なショートハンドです。 ローカルに保持されている古いタグを取り除くための便利なショートハンドです。

を参照してください。 コミット 6317972 , コミット 97716d2 , コミット e249ce0 , コミット 627a129 , コミット d0e0747 , コミット 2c72ed7 , コミット e1790f9 , コミット 59caf52 , コミット 82f34e0 , コミット 6fb23f5 , コミット ca3065e , コミット bf16ab7 , コミット eca142d , コミット 750d0da , コミット 0711883 , コミット ce3ab21 , コミット aa59e0e (2018年02月09日)による Ævar Arnfjörð Bjarmason ( avar ) .

(によって統合されました。 ジュニオ・C・ハマノ--。 gitster -- コミット c1a7902 , 2018年03月06日)

フェッチ を追加します。 --prune-tags オプションと fetch.pruneTags コンフィグ

<ブロッククオート

を追加します。 --prune-tags オプションを git-fetch と共に fetch.pruneTags という設定オプションと -P ショートハンド( -p--prune ).

のいずれかを行うことができます。

git fetch -p -P
git fetch --prune --prune-tags
git fetch -p -P origin
git fetch --prune --prune-tags origin

あるいは単純に

git config fetch.prune true &&
git config fetch.pruneTags true &&
git fetch

の代わりに、もっと冗長な

git fetch --prune origin 'refs/tags/*:refs/tags/*' '+refs/heads/*:refs/remotes/origin/*'

この機能の前に というユースケースをサポートするのは苦痛でした。 ブランチの両方を持つリポジトリから タグが削除される を定期的に削除し、ローカルでの参照を上流に反映させる必要があります。

仕事では、ロールアウトごとにレポにデプロイメントタグを作成します。 そこには たくさん があるので、パフォーマンス上の理由から数週間以内にアーカイブされます。 パフォーマンス上の理由で数週間以内にアーカイブされます。

この変更なしには でそのようなレポを一元的に設定することは困難です。 /etc/gitconfig (でそのようなレポを一元的に設定することは困難です。 で一元的に設定することは困難です。) そのため fetch.prune=true をグローバルに設定し、さらに各 レポに設定する必要があります。

git -C {} config --replace-all remote.origin.fetch "refs/tags/*:refs/tags/*" "^\+*refs/tags/\*:refs/tags/\*$"

これで、単純に fetch.pruneTags=true /etc/gitconfig を実行するユーザーもいます。 を実行しているユーザーと、" git pull を実行しているユーザは、自動的に私が望む刈り込みのセマンティクスを得ることができます。 を実行しているユーザーは、自動的に私が望む剪定セマンティクスを得ることができます。


2021年4月更新、Git for Windows 2.30.1および GitHub Desktop 2.8

を設定すると動作します。 prune pruneTags のオプションがあります。

cd C:\path\to\local\repo
git config fetch.prune true
git config fetch.pruneTags true

次にGitHub DeskopのFetch originをクリックすると、ログが表示されます。

2021-04-28T20:25:21.244Z - info: [ui] Executing fetch: 
  git -c credential.helper= -c protocol.version=2 fetch --progress --prune origin (took 2.986s)

...そして、リモートに存在しないローカルタグは消えてしまいます!