2016-09-27 2 views
2

私たちのチームはGit for WindowsとGitHubをリモートリポジトリとして使用しています。同じブランチで2人の名前が異なる場合(大文字と小文字が異なる)に問題が発生しています。Windows(GitHubリモート)のすべてのGitブランチ名の名前を小文字に変更

この問題を回避するために、すべてのブランチ名に対して小文字を使用することを標準化したいと思いますが、既存のブランチ名をすべて小文字に変換するにはどうすればよいですか?ローカルとリモートの両方に多くの支店があり、一部は未解決の要求を引き出しています。私は実際には「アクティブな」ブランチ、つまり人々が再びプッシュするブランチを気にするだけです。

https://gist.github.com/lttlrck/9628955に記載されている手順を試しましたが、いくつかの問題がありました。まず、 "BranchName"をWindowsの "branchname"に直接変更することはできませんが、これは一時的な名前で回避できます。

さらに深刻な問題は、ブランチに「フォルダ名」があることです。 "Test/RenameTest"。ローカルブランチの名前を "test/renametest"に変更すると動作するように見えますが、それをプッシュするのはfatal: test/renametest cannot be resolved to branch.で失敗します。 "Test/Whatever"という名前のブランチがあるので、 "Folder Name" "、"テスト "ではありません。すべてのマシンでチェックアウトされた各ブランチの名前を手動で変更する必要があります。私はもっ​​と良い解決策があると思っています。

+0

すべての非アクティブなブランチを削除できない理由はありますか。 –

+0

私たちは問題になることはありません。すべてのアクティブブランチが問題です。 – EM0

+0

大丈夫です。 「すべてのマシンでチェックアウトしたすべてのブランチの名前を手動で変更する必要があります」は、非アクティブなブランチが含まれているように聞こえました。 –

答えて

2

あなたはワンステップで別のリモートブランチに基づいてリモートブランチを作成することができます。

git push origin origin/PATH/TO/MY_BRANCH:refs/heads/path/to/my_branch 

注構文は:

git push [remote] [REF]:refs/heads/[BRANCH] 

そしてorigin/PATH/TO/MY_BRANCHが有効refがあることから、それがために使用することができますgit pushコマンド

それからちょうどそのように、間違って名前のリモートブランチを削除します。

git push --delete origin PATH/TO/MY_BRANCH 

お使いのWindowsのGit Bashのターミナルが利用可能grepsedcutコマンドを持っている場合、あなたはおそらく一度にそれをすべて行うことができます。このようなものから始めて、それが一度よく見えたら、その出力を独自のシェルスクリプト(例えば、sh script_below.sh > my_big_git_rename.sh)にパイプして、それを実行してください!

#!/bin/sh 
git branch --remotes | # list all remote branches 
grep '[A-Z]'   | # only list branches with upper-case in their name 
cut -b 10-    | # cut first 10 chars (assumes remote named 'origin') 

# build "git push" command: 
sed 's/\(^.*$\)/git push origin origin\/\1:refs\/heads\/\1/' | 

sed 's/:\(.*\)/:\L\1/' # lower-case the branch name 
+0

OK、それは1つの作業コピーで動作するようです。私は "Test/RenameTest" - > "test/renametest"に名前を変更しました。しかし、別の作業コピー( "Test/RenameTest"ブランチがチェックアウトされている)で 'git pull'を実行しようとすると、"あなたの設定がリモートからref 'heads/Test/RenameTest'そのようなリファレンスは取得されませんでした。これがどこに設定されているのか分かりません。 'git branch -m'を使ってローカルブランチの名前を小文字に変更しようとしました。私は手動でGit Extensionsのリモートリポジトリダイアログで "Default merge with"を設定しようとしましたが、同じエラーが表示されます。 – EM0

+0

ああ、ローカルブランチの名前を変更した後、追跡しているリモートブランチも変更する必要があります:git branch -m Test/RenameTest test/renametest; gitのブランチ--set-上流に起源/テスト/ renametest –

+2

OK、私が実際に名前の変更を完了するために、枝あたり4命令が必要であることを表示されるように: 'Gitのプッシュ原点起源/ OLD_BRANCH_NAME:レフリー/ヘッド/ NEW_BRANCH_NAME 。 git push - 元に戻すOLD_BRANCH_NAME ; gitブランチ-m OLD_BRANCH_NAME NEW_BRANCH_NAME ; gitブランチ--set-upstream-to = origin/NEW_BRANCH_NAME NEW_BRANCH_NAME ; ' – EM0

関連する問題