58 votes

git push échoue: `refuser de mettre à jour la branche extraite: refs / heads / master`

Je veux stocker mes modifications locales pour JBoss configuration dans git. Pour cela, j'ai mis en place la structure suivante:

lrwxrwxrwx  1 jboss jboss        19 Jan 24 11:53 current -> jboss-as-7.1.0.CR1b
drwxr-xr-x 11 jboss jboss      4096 Jan 24 12:13 jboss-as-7.1.0.CR1b
-rw-r--r--  1 jboss jboss 108211143 Jan 23 16:02 jboss-as-7.1.0.CR1b.tar.gz
drwxr-xr-x  6 jboss jboss      4096 Jan 24 11:36 local

local est le dépôt git qui doit être "à l'origine". L'idée est que je veux être en mesure de facilement mettre à jour mon JBoss distribution une fois une mise à jour est disponible. Je veux stocker toutes les modifications locales distribué, JBoss paquet dans le dépôt git.

Donc, actuellement, je fais ceci:

jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git init
Initialized empty Git repository in /opt/jboss/jboss-as-7.1.0.CR1b/.git/
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git remote add origin ../local/   
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git pull origin master 
From ../local
 * branch            master     -> FETCH_HEAD

C'est très bien, toutes mes modifications locales sont là où je les veux.

Cependant, une fois que j'ai modifications locales et souhaitez bush de retour à l' local référentiel, j'obtiens une erreur:

jboss@tpl0:~/jboss-as-7.1.0.CR1b$ vim standalone/configuration/standalone.xml   
jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git commit -a -m "renamed database to project2_core,   to distinguish from other projects"
[master 3e54f34] renamed database to project2_core, to distinguish from other projects
Committer: jboss <jboss@tpl0.(none)>
 1 files changed, 1 insertions(+), 1 deletions(-)

jboss@tpl0:~/jboss-as-7.1.0.CR1b$ git push origin master 
Counting objects: 9, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 447 bytes, done.
Total 5 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable t
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in som
remote: error: other way.
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, se
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To ../local/
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '../local/'

Que puis-je faire à ce sujet? Toute aide est grandement appréciée!

MODIFIER

Voici ce que j'ai fait, ce qui a résolu le problème:

cd ~/current
git init
vim .gitignore                   # set up a basic .gitignore file
git add .gitignore
git commit -a -m "initial commit"
cd ~/local
git clone ~/current
git branch -m master current     # rename master branch to 'current'
git branch repo
git checkout repo

Maintenant, la direction de la current dans le répertoire ~/local est toujours up-to-date, mais il n'est pas cheked, de sorte que je peux pousser.

68voto

Ilion Points 4274

Pousser est destiné à un repos nu. Pour les pensions non-nues, vous devriez y aller.

Si vous souhaitez malgré tout forcer cette opération, vous pouvez procéder comme le message d'erreur l'indique et paramétrer receive.denyCurrentBranch pour l'ignorer. SSH à l’emplacement du référentiel sur lequel vous vous appuyez et que vous exécutez:

 git config receive.denyCurrentBranch ignore
 

60voto

vpatil Points 1210

La branche principale du site distant est extraite. Si vous avez accès au référentiel distant, vérifiez n'importe quelle autre branche, puis effectuez un push depuis votre référentiel.

15voto

Hiery Nomus Points 4157

Créez le référentiel d'origine (local) en tant que référentiel nu (par exemple, git init --bare), ou extrayez une branche qui n'est pas maître.

14voto

Student Jack Points 86

OU,

Lorsque vous initialisez votre projet distant, utilisez

 git init --bare
 

1voto

Ian Jones Points 886

J'ai réussi à résoudre ce problème en tirant de «local» dans «actuel» plutôt que de pousser à «actuel» de «local».

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X