2016-09-27 9 views
2

Наша команда использует Git для Windows и Git Extensions с GitHub как удаленный репозиторий. Люди создали ветви с несогласованной капитализацией, что вызвало некоторые проблемы, когда у двух людей разные имена (разные по отдельности) для той же ветви.Переименовать все имена ветвей Git в нижнем регистре Windows (удаленный GitHub)

Мы хотели бы стандартизировать использование нижнего регистра для всех названий ветвей, чтобы избежать этой проблемы, но как мы преобразуем все существующие имена ветвей в нижний регистр? Существует много филиалов, как локальных, так и удаленных, и некоторые из них требуют выдачи запросов. Я действительно забочусь только о «активных» ветвях, т. Е. Тех, от которых люди будут настаивать снова.

Я пробовал шаги, перечисленные на https://gist.github.com/lttlrck/9628955, но столкнулся с некоторыми проблемами. Во-первых, я не могу переименовать «BranchName» непосредственно в «branchname» в Windows, но это нормально, это можно обойти с временным именем.

Более серьезная проблема заключается в том, что у нас есть «имена папок» в ветвях, например. "Test/RenameTest". Когда я переименую локальную ветвь в «test/renametest», она работает, но затем нажатие не получается с fatal: test/renametest cannot be resolved to branch.. Я думаю, это связано с тем, что у меня есть другие ветви с именем «Test/Whatever», поэтому «имя папки» по-прежнему «Test» ", а не" тест ". Необходимость вручную переименовывать каждую ветвь, когда-либо проверенную на каждой машине, является сложной перспективой. Я надеюсь, что есть лучшее решение.

+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 является действительным исх, он может быть использован для команда git push.

Тогда просто удалить неправильно с именем удаленного филиала, например, так:

git push --delete origin PATH/TO/MY_BRANCH 

Если ваш терминал для Windows Git Bash имеет grep и sed и cut команды, доступные вы, вероятно, можете делать все это сразу. Начните с чего-то подобного, и как только он выглядит хорошо, выведите его вывод в свой собственный сценарий оболочки (например, 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

ОК, похоже, работает в одной рабочей копии, например. Я переименовал «Test/RenameTest» -> «test/renametest». Однако, когда я пытаюсь выполнить git pull в другой рабочей копии (у которой была проверена ветка «Test/RenameTest»), я получаю «Ваша конфигурация указывает на объединение с ref ref/head/Test/RenameTest» с удаленного, но такого рефлекса не было ». Я не понимаю, где это настроено. Я попытался переименовать локальную ветку в нижний регистр, используя 'git branch -m'. Я даже попытался вручную установить «Слияние по умолчанию с» в диалоговом окне «Удаленные репозитории Git Extensions Remote», но я все равно получаю ту же ошибку. – EM0

+0

Ahhh, после переименования локальной ветви, вам также необходимо изменить удаленное ветвление, которое оно отслеживает: git branch -m Test/RenameTest test/renametest; git branch --set-upstream-to origin/test/renametest –

+2

ОК, так что мне действительно нужно 4 команды на каждую ветку для завершения переименования: 'git push origin origin/OLD_BRANCH_NAME: refs/heads/NEW_BRANCH_NAME ; git push --delete origin OLD_BRANCH_NAME ; git branch -m OLD_BRANCH_NAME NEW_BRANCH_NAME ; git branch --set-upstream-to = origin/NEW_BRANCH_NAME NEW_BRANCH_NAME ; ' – EM0