31

「ダムスナップショット」をgitに変換するという面倒なプロセスを完了しようとしています。このプロセスは非常に順調に進んでいます (この名前変更プロセスbranchのおかげです) tag

すべてがまだローカルにあるため (リポジトリにプッシュされることはありません)、この質問(および関連する回答) は私が好むよりもやや面倒であることがわかりました。 -tag」コマンド?

ブランチをタグに変換する簡単なコマンドはありますか?

gitk(そのままにしておくことができることはわかっていますが、タグを強調表示して簡単に識別できるようにする方法が本当に気に入っています)。

更新:以下の @Andy の回答のおかげで、すべてを便利かつ簡単に実行できるシェル スクリプトを思いつくことができました。CVS から git への移行を可能にしてくれたこの素晴らしいコミュニティに感謝します。

#!/bin/sh

BRANCHNAME=$1
TAGNAME=$2

echo "Request to convert the branch ${BRANCHNAME} to a tag with the same name accepted."
echo "Processing..."
echo " "

git show-ref --verify --quiet refs/heads/${BRANCHNAME}
# $? == 0 means local branch with <branch-name> exists. 

if [ $? == 0 ]; then
   git checkout ${BRANCHNAME}
   git tag ${BRANCHNAME}
   git checkout master
   git branch ${BRANCHNAME} -d
   echo " "
   echo "Updated list branches, sorted chronologically: "
   echo "---------------------------------------------- "
   git log --no-walk --date-order --oneline --decorate $(git rev-list --branches --no-walk) | cut -d "(" -f 2 | cut -d ")" -f 1
else
   echo "Sorry. The branch ${BRANCHNAME} does NOT seem to exist. Exiting."
fi
4

3 に答える 3

41

与えられた答えは基本的に正しいです。

タグとブランチはオブジェクトの名前にすぎないため、現在の作業領域に触れずに簡単な方法があります。

git tag <name_for_tag> refs/heads/<branch_name> # or just git tag <name_for_tag> <branch_name>
git branch -d <branch_name>

または、ローカルリポジトリにまったく触れずにリモートサーバーに対して実行することもできます:

git push origin origin/<branch_name>:refs/tags/<tag_name>
git push origin :refs/heads/<branch_name>
于 2013-05-06T17:58:32.220 に答える
18

これらのブランチで別々の開発が行われましたか? (リンク先の投稿は、これらのブランチで開発されていないようです)開発がなかった場合は、次のことができます。

  1. ブランチをチェックアウトしgit checkout branchNameます。
  2. でタグ付けしgit tag tagNameます。
  3. master に戻りますgit checkout master
  4. 最後に、元のブランチを で削除しgit branch branchName -dます。

これは、ブランチに開発があった場合にも実行できますが、-D代わりにを使用する必要があります-d。私は git pro ではないので、それがブランチを離れる「許容できる」方法であるかどうかはわかりません。

于 2011-07-12T15:35:30.970 に答える