2015-09-08 3 views
1

У меня есть репозиторий с удаленной отраслевой структурой, как это:Rename Git папка филиала

bugfix001 
bugfix002  
feature 
    feature001 
    feature002 
    feature003 
master 
task 
    task001 
    task002 

где «функция» и «задача» являются папками в отраслевой структуре и «feature001», «feature002» ветви находятся в родительской папке «feature».

Мой вопрос: возможно ли переименовать родительскую папку «feature» и сохранить все ветви под ней. Так что я мог бы переименовать его в «хомяк» и структура будет выглядеть следующим образом

hamster 
    feature001 
    feature002 
    feature003 

Просто чтобы быть ясно, я не имею в виду локальной файловой структуры, это отраслевая структура на пульте дистанционного управления. Чтобы добавить филиал в папке «особенность» Я хотел бы использовать:

git checkout -b feature/feature004 

Я понимаю, что я могу переименовать каждую подотрасль по отдельности и нажать на пульте дистанционного управления, но я могу переименовать 'функцию родительскую папку, которая будет вызывать желание подвестры следуют за новым именем?

+0

Лучше всего переименовать ветки по одному, используя сценарий оболочки. – meagar

ответ

3

В git нет такой вещи, как «папки папок».

У вас есть только имена ветвей, и имена, которые вы используете, включают в себя косую черту, которая напоминает людей о структуре папок; но это действительно может быть что-то другое (например, @).

В заключение: вам придется переименовать каждую ветку, и нажмите новые имена филиалов (и удалять старые)

Но это должно быть достаточно просто:

remote=origin 
for branch in $(git branch --list "feature/*") 
do 
newbranch="hamster/${branch#feature/}" 
# locally create new branch based on old one 
git checkout "${branch}" 
git checkout -b "${newbranch}" 
# push the new branch to the remote 
git push --set-upstream "${remote}" "${newbranch}" 
# delete old branch remotely and locally 
git push "${remote}" ":${branch}" 
git branch -d "${branch}" 
done 
1

в git, вы можете назвать ветку так, как вы хотите, используя косые черты (/) или нет. Эти косые черты НЕ ДОЛЖНЫ относятся к разделению папок. Поэтому, если вы хотите переименовать все ветви, начиная с «функции», вам придется делать это вручную для каждого из них.

Используя тот же префикс, вы можете перечислить некоторые подмножества ветвей; например:

git branch --list "feature/*" 

но не намного больше, чем афайк.

2

Как другие В Git нет концепции папок, это просто имена. Ваш единственный выбор - переименовать их один за другим. Сценарий может помочь сделать это - вот пример для переименования местных отделений:

for i in $(git branch --list 'feature/*') ; do 
    echo "$i" 
    # Cut off the first part 
    newbranch=new/$(basename "$i") 

    # Rename the existing branch 
    git branch -m "$i" "$newbranch" 

    # Push the new branche 
    git push origin "$newbranch" 

    # Delete the old branch from the remote 
    git push origin :"$newbranch" 
done 

Это будет переименовать все ветви, соответствующие «функции/» к «новому/».

Любой, кто вытаскивает из этого репо, должен будет настроить отслеживание для переименованных ветвей, поскольку предыдущие ветви больше не будут там.

+1

приятный трюк с использованием 'basename' для разметки пути-подобного компонента; он может не делать то, что вы ожидаете, если у вас есть теги с несколькими слэшами: '/ feature/gui/foo' и' feature/network/foo' оба будут переименованы в 'new/foo' –

+0

Это правда - он оставит последняя часть нетронутая. – nwinkler

2

Когда вы называете ветви с именем / в имени, то каталог создается в refs/heads. Например, ветвь с именем feature/feature001 создает каталог с именем refs/heads/feature/, который содержит файл feature001.Если вы переименуете каталог feature, вы фактически переименовываете каждую ветку, которая начиналась с feature/ (по модулю всего, что у вас есть в packed-refs). Это не рекомендуемый способ переименования филиалов, но он работает. Вам нужно будет отредактировать файл конфигурации, чтобы повторно подключить любую из ветвей, которые указали ветку отслеживания. Помимо этого, и снова игнорируя все, что может быть в packed-refs, вы можете делать то, что вы просите.

+0

Это интересно, но звучит довольно страшно –

Смежные вопросы