Получение ошибки 'receive.denyCurrentBranch' при нажатии на голое репозиторий Git - PullRequest
6 голосов
/ 23 октября 2010

Сделайте удаленный репозиторий git bare, на который я поместил ветку с одной машины и вытащил на другую машину.

Сделал некоторые изменения на другой машине, пытаясь отодвинуть эти изменения обратно в удаленный репозиторий, и я получил ошибку 'receive.denyCurrentBranch'.

Что происходит?

Это не должно происходить на голом репо - на этом ничего не проверено.

Ветви, как видно из машины 2:

Fix
dev1
dev2
remotes/origin/HEAD -> origin/dev1
remotes/origin/Fix
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master

'Fix' - текущая ветвь на обеих машинах разработчика.

Когда я первоначально вытащил эту ветку на машине 2, я сделал:

git pull
git checkout -b Fix origin/Fix

Я с подозрением отношусь к первой «удаленной» линии - кажется, что HEAD должен указывать на мою текущую ветку, но это не так. Думаю, я что-то упустил, здесь ..

Обновление 1 Я слил ветку 'Fix' вниз с веткой dev1, а затем протолкнул ветку 'dev1' - она ​​работала нормально (я все равно собирался это сделать).

Итак, это был обходной путь, но я думаю, что реальная проблема заключалась в том, что HEAD был привязан не к текущей ветви ('Fix'), а к неактивной ветви ('dev1'). Я не уверен, как сменить голову на удаленном репо?

1 Ответ

1 голос
/ 11 апреля 2011

С компьютера 2, чтобы загрузить ссылки из локального репозитория в удаленный репозиторий, вы можете использовать явные ссылки в команде push:

git push origin Fix:refs/heads/Fix

После этого в Machine 1 вы должны использовать команду fetch для получения удаленных ссылок

git fetch

В списке ветвей (git branch -a) вы найдете origin / Fix (или remotes / origin / Fix), вы можете просматривать содержимое удаленной ветви напрямую, используя команду checkout:

git checkout origin/Fix

Внесите изменения, зафиксируйте и т. Д., А затем нажмите его, используя ту же команду, что и на компьютере 2:

git push origin Fix:refs/heads/Fix

Чтобы отследить ветвь (то есть создать локальную ветвь , которая "указывает" на удаленную ветвь, используйте команду checkout с опцией - track ):

git checkout --track -b Fix origin/Fix

Затем вы можете работать с локальной веткой Исправить и делать push и pull без других аргументов

git pull
git commit
git push
...