284 votes

Pourquoi ne puis-je pas pousser vers ce dépôt nu ?

Pouvez-vous expliquer ce qui ne va pas dans ce flux de travail ?

$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'

Non. git push toujours pousser vers le dépôt d'où j'ai cloné ?

0 votes

Ne devriez-vous pas spécifier la branche à pousser ?

3 votes

Pas après un clone ! !! après que le problème soit corrigé, cela fonctionne très bien et il n'est pas nécessaire de spécifier la branche... c'est seulement lors de ce premier checkout d'un dépôt vide que cela se produit, ce qui est TRÈS TRÈS ennuyeux... ils devraient corriger ce problème.

0 votes

J'espère que cet article sera utile à quelqu'un qui essaie de faire ce qui précède samranga.blogspot.com/2015/07/ L'erreur dans la question peut apparaître même lorsque l'on essaie de créer un dépôt git BitBucket à partir d'un projet déjà existant localement.

485voto

Seth Robertson Points 13276

Oui, le problème est qu'il n'y a pas de commits dans "bare". C'est un problème avec le premier commit seulement, si vous créez les dépôts dans l'ordre (bare,alice). Essayez de le faire :

git push --set-upstream origin master

Cela ne serait nécessaire que la première fois. Ensuite, le système devrait fonctionner normalement.

Comme l'a souligné Chris Johnsen, vous n'auriez pas ce problème si votre push.default était personnalisé. J'aime bien upstream/tracking.

1 votes

Je fais sudo apt-get upgrade git-core y sudo apt-get upgrade git et il pense qu'aucune mise à jour n'est nécessaire. git --version retourne 1.7.3.1. Une idée de ce qui manque ? J'admets qu'actuellement apt-get update ne fonctionne pas pour moi, mais ça marchait il n'y a pas si longtemps.

1 votes

@ripper234 : La version actuelle de git est 1.7.5.3 Vous pouvez soit vivre avec ce désagrément, soit utiliser un flux de travail différent, soit installer manuellement la dernière version de git sans le packaging de debian/ubuntu.

0 votes

Ah oui, j'avais oublié que les logiciels prennent du temps avant d'être emballés. Je suis un noob linux, venant de Windows, et habitué à cliquer-ici-pour-installer-la-nouvelle-version.

42voto

serby Points 1425

Si vous :

 git push origin master

il sera poussé vers le repo nu.

Il semble que votre dépôt d'Alice ne suive pas correctement.

cat .git/config

Ceci montrera le distant et la branche par défaut.

Si vous

 git push -u origin master

Vous devriez commencer à suivre cette télécommande et cette branche. Je ne suis pas sûr que cette option ait toujours été dans git.

30voto

phpguru Points 420

La réponse à cette question connexe a fourni la solution pour moi... c'était juste une erreur stupide :

N'oubliez pas de vous engager d'abord !

https://stackoverflow.com/a/7572252

Si vous n'avez pas encore commis sur votre repo local, il n'y a rien à pousser, mais le message d'erreur de Git que vous recevez en retour ne vous aide pas beaucoup.

18voto

ebneter Points 4834
git push --all

est la façon canonique de tout pousser vers un nouveau dépôt nu.

Une autre façon de faire la même chose est de créer votre nouveau dépôt, non nu, puis de faire un clone nu avec

git clone --bare

puis utiliser

git remote add origin <new-remote-repo>

dans le dépôt d'origine (non dénudé).

0 votes

...alors vous avez rétrogradé la réponse ? C'est es la manière standard de tout pousser vers un nouveau dépôt nu. Si cela n'a pas fonctionné pour vous, il y a un autre problème.

0 votes

Tu as raison, je n'aurais probablement pas dû, je sais que tu essayais juste d'aider. Si tu le modifies, j'annulerai mon downvote.

0 votes

Merci, je l'ai modifié avec une autre façon d'accomplir la même tâche.

7voto

Chris Johnsen Points 50064

Essayez ceci dans votre alice (avant de le pousser) :

git config push.default tracking

Ou bien, configurez-le par défaut pour votre utilisateur avec git config --global … .


git push s'applique par défaut à la origin (qui est normalement le référentiel à partir duquel vous avez cloné le référentiel courant), mais il ne pousse pas par défaut la branche courante - il pousse par défaut seulement les branches qui existent à la fois dans le référentiel source et le référentiel de destination.

El push.default (voir git-config(1) ) contrôle ce que git push sera poussé lorsqu'il ne reçoit pas d'arguments "refspec" (c'est-à-dire quelque chose après un nom de référentiel). La valeur par défaut donne le comportement décrit ci-dessus.

Voici les valeurs possibles pour push.default :

  • nothing
    Cela vous oblige à fournir une "refspec".

  • matching (par défaut)
    Cela pousse todo les branches qui existent à la fois dans le référentiel source et le référentiel de destination.
    Ceci est complètement indépendant de la branche qui est actuellement extraite.

  • upstream o tracking
    (Les deux valeurs signifient la même chose. La dernière valeur a été dépréciée pour éviter toute confusion avec les branches de "suivi à distance". La première a été introduite dans la version 1.7.4.2, vous devrez donc utiliser la seconde si vous utilisez Git 1.7.3.1).
    Ils poussent la branche courante vers la branche spécifiée par sa configuration "amont".

  • current
    Ceci pousse la branche courante vers la branche du même nom dans le référentiel de destination.

    Ces deux derniers sont finalement les mêmes pour les cas les plus courants (par exemple, le travail sur des sites locaux). maître qui utilise origine/maître comme son amont), mais ils sont différents lorsque la branche locale a un nom différent de sa branche "amont" :

    git checkout master
    # hack, commit, hack, commit
    
    # bug report comes in, we want a fix on master without the above commits
    
    git checkout -b quickfix origin/master  # "upstream" is master on origin
    # fix, commit
    git push

    Avec push.default égal à upstream (ou tracking ), l'impulsion serait donnée à origin 's maître branche. Lorsqu'il est égal à current le coup de pouce irait à origin 's quickfix branche.

El matching mettra à jour le paramètre bare 's maître dans votre scénario une fois qu'il a été établi. Pour l'établir, vous pouvez utiliser git push origin master une fois.

Cependant, le upstream (ou peut-être current ) semble mieux correspondre à ce que vous attendez, vous pouvez donc l'essayer :

# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push

# configure it for only this repository
git config push.default upstream

# configure it for all repositories that do not override it themselves
git config --global push.default upstream

(Encore une fois, si vous utilisez toujours un Git antérieur à la version 1.7.4.2, vous devrez utiliser tracking au lieu de upstream ).

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