Як мені перейменувати гілку Git 'master' на 'release'?


115

Ми хотіли б запровадити нову політику щодо наших проектів, яку головна гілка тепер називатиметься відділенням випуску, щоб переконатися, що вона буде більш зрозумілою, як слід використовувати гілку. Природно, ми також матимемо розробку та випуск кандидатських гілок.

Я розумію, що я можу перейменувати локальну гілку локально, просто скориставшись наступним:

git branch -m master release

Однак це лише локально. Навіть якщо я підштовхую це до віддаленого, HEAD все одно вказує на віддалену головну гілку. Я хочу повністю позбутися від ведучої гілки та зробити локальну гілку за замовчуванням при початковому клонуванні, бути звільненим.

Як я можу цього досягти?

Здається, що оскільки джерело знаходиться на сервері Gitorious , я отримую помилки при видаленні головного відділення. Зараз я намагаюся зрозуміти, чи можна це змінити, щоб гілка за замовчуванням була «випуском».


2
Хе, досить справедливо. Довгострокова вартість досить висока, щоб хоча б спробувати.
Кайл Хейс


Деякі (віддалений) сервер відмовляються видаляти гілку "за замовчуванням" (це стосується Github). Тож вам, можливо, потрібно зайти на сервер, щоб вибрати іншу гілку "за замовчуванням" на час операцій ... У Github це можна зробити у вікні "гілка".
jehon

1
git branchтепер підтримує --moveпрапор git-scm.com/docs/git-branch#Documentation/git-branch.txt---move
alxndr

Відповіді:


139
git checkout -b release master    # Create and switch to the release branch
git push -u origin release        # Push the release branch to the remote and track it
git branch -d master              # Delete local master
git push --delete origin master   # Delete remote master
git remote prune origin           # Delete the remote tracking branch

Зауважте, якщо ви використовуєте GitHub, вам потрібно буде спочатку змінити свою гілку "за замовчуванням" на GitHub після кроку 3:

У вашому сховищі на github.com перейдіть НалаштуванняВідділенняВідділення за замовчуванням . Змініть його до звільнення, а потім виконайте інші кроки.


3
Коли я намагаюся git push --delete, я отримую таку помилку: видалення поточної гілки заборонено
Kyle Hayes

8
Ви використовуєте github або щось подібне, вам потрібно зробити гілку за замовчуванням щось інше: matthew-brett.github.com/pydagogue/gh_delete_master.html або просто залишити там майстра і проігнорувати його.
Адам Димітрук

Так, у нас є надзвичайний екземпляр. Дозвольте мені побачити, чи це варіант.
Кайл Хейс

Виглядає так, що гігантські "гачки фіксації забороняють видалення ведучої гілки - без жодної вагомої причини, яку я бачу: /
fge

1
Те саме ! [remote rejected] branch (deletion of the current branch prohibited) відбудеться і з Bitbucket. Перемкніть "Основний сховище" на екрані налаштувань (під значком шестірні).
dnfehren

13

Перевірте свою головну галузь

git checkout master

Створіть свою філію випуску та перейдіть до неї:

git branch release
git checkout release

Натисніть на сервер

git push origin release

Видаліть основну посилання гілки на сервері

git push origin :master

Видаліть локальну головну гілку

git branch -d master

2
Я можу сказати, що через ці кроки я зіткнуся з тією ж помилкою, про яку я згадував вище.
Кайл Хейс

@KyleHayes Це проблема конфігурації сервера. Хоча це за замовчуванням процес зміни, який повинен бути або очевидним для користувача, або легко виявити на Stackoverflow
Джефф Ферланд

Ви повинні перейти до іншої гілки, перш ніж ви зможете видалити гілку.
понедельник

5

Примітка. Ця відповідь призначена для влаштованих серверів Git, до яких у вас є доступ до командного рядка.

Оскільки спроба видалити remote masterз клієнта дійсно заборонена, і я вважаю, що заборона denyDeleteCurrentмає сенс, я не хотів би змінювати це налаштування.

Однак я виявив, що найпростіший спосіб перейменувати свого майстра, якщо ви маєте доступ до віддаленого сервера командного рядка - це запустити команду перейменування безпосередньо на віддалений.

Це працювало для мене:

  1. Вхід через SSH на віддалений сервер git
  2. Перейдіть до папки xxx.git свого проекту
  3. запустити: git branch -m master release

Тепер віддалене сховище використовує releaseяк свою гілку за замовчуванням, а будь- git cloneяке сховище будь-якого клієнта перевіряє гілку випуску за замовчуванням.

Це дуже корисно також після налаштування голого сховища, щоб налаштувати його під ваші потреби.


3

Як раніше заявляли інші, проблема тут є Gitorious, що не дозволяє видаляти гілку HEAD за замовчуванням. У вас є два варіанти подолання цієї проблеми. Перший - увійти на сервер Gitorious (з ssh), знайти сховище Git на файловому сервері та додати:

[receive]
        denyDeleteCurrent = warn

до конфігурації.

Простіший варіант - просто змінити гілку за замовчуванням. Перейдіть до вашого сховища у веб-інтерфейсі Gitorious, натисніть "Редагувати сховище" та встановіть "Head Змінити символічний перелік HEAD у репозиторії Git вказує на:". Після цього ви можете видалити головну гілку.


2

Якщо ви зіткнулися з цією проблемою за допомогою GitHub , виконайте кроки до видалення гілки на віддаленому. Це не дозволить вам це зробити. Потім увійдіть у веб-інтерфейс і на сховищі перейдіть у меню НалаштуванняВідділенняВідділення за замовчуванням . Змініть його на нову гілку та виконайте решту кроків.


1

В ідеалі ви хочете налаштувати відстеження, то зробіть так:

git push origin HEAD:release
git checkout --track origin/release

Тепер ви хочете видалити інші?

git branch -d master
git push origin :master

Просто!


Я отримав таку саму помилку, як та, яку я опублікував у коментарі @ Адама, коли я дістався до git push origin: master command.
Кайл Хейс

0

Оскільки ви закінчили з перейменуванням гілок, встановіть для HEAD значення releaseдля віддаленого

git remote set-head origin release

Тоді, щоб видалити masterгілку у віддаленому, вам потрібно було б бути адміністратором, принаймні на GitHub. Будь ласка, зверніться до цієї публікації для отримання додаткової інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.