225 votes

Comment puis-je trouver l'emplacement de l'origine / maître dans git, et comment puis-je le changer?

Je suis un Git débutant. J'ai récemment déménagé de Rails de projet de Subversion vers Git. J'ai suivi le tuto ici: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/

Je suis également en utilisant unfuddle.com pour stocker mon code. - Je faire des modifications sur mon Mac portable dans le train pour/de travail, puis de la pousser à unfuddle quand j'ai une connexion réseau à l'aide de la commande suivante:

git push unfuddle master

J'utilise Capistrano pour les déploiements et tirez le code de la unfuddle référentiel à l'aide de la branche master.

Dernièrement, j'ai remarqué le message suivant quand je lance "git status" sur mon ordinateur portable:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#
nothing to commit (working directory clean)

Et je suis confus quant à pourquoi. Je pensais que mon portable était à l'origine... mais ne sais pas si le fait que j'ai tiré de Subversion ou de pousser à Unfuddle est ce qui provoque le message à afficher. Comment puis-je:

  1. Trouver où Git pense 'origin/master' est?
  2. Si il est ailleurs, comment puis-je allumer mon portable dans le 'origin/master'?
  3. Ce message de s'en aller. Il me fait penser à Git n'est pas satisfait de quelque chose.

Mon mac est en cours d'exécution de version Git 1.6.0.1.


Lorsque j'exécute git remote show origin comme suggéré par dbr, je reçois le texte suivant:

~/Projects/GeekFor/geekfor 10:47 AM $ git remote show origin
fatal: '/Users/brian/Projects/GeekFor/gf/.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

Lorsque j'exécute git remote -v comme suggéré par Aristote Pagaltzis, je reçois le texte suivant:

~/Projects/GeekFor/geekfor 10:33 AM $ git remote -v
origin  /Users/brian/Projects/GeekFor/gf/.git
unfuddle    git@spilth.unfuddle.com:spilth/geekfor.git

Maintenant, il est intéressant, je suis en train de travailler sur mon projet dans l' geekfor répertoire, mais il me dit que mon origine est ma machine locale dans l' gf répertoire. Je crois gf a été le répertoire temporaire que j'ai utilisé lors de la conversion de mon projet de Subversion vers Git et probablement où j'ai poussé à unfuddle. Alors je crois que j'ai vérifié une nouvelle copie de unfuddle à l' geekfor répertoire.

Donc il semble que je devrais suivre dbr, les conseils et le faire:

git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git

285voto

Earl Jenkins Points 3244

Je suis venu à cette question, la recherche d'une explication sur ce que le message "votre branche est en avance par...", dans le régime général de git. Il n'y a pas de réponse ici, mais depuis que cette question actuellement à l'affiche jusqu'au sommet de Google lors de la recherche de l'expression "Votre branche est en avance de 'origin/master'", et depuis, j'ai compris la véritable signification du message, je pensais que je poste l'info ici.

Donc, en étant un git newbie, je peux voir que la réponse dont j'avais besoin était nettement newbie réponse. Plus précisément, ce que le "votre branche est en avance par..." phrase signifie qu'il y a des fichiers que vous avez ajoutés et engagée à votre dépôt local, mais n'ont jamais poussé à l'origine. Le but de ce message est encore obscurci par le fait que "git diff", au moins pour moi, n'ont montré aucune différence. Il n'était pas jusqu'à ce que j'ai couru "git diff origin/master" qui m'a été dit qu'il y avait des différences entre mon dépôt local, et le maître.

Donc, pour être clair:


"votre branche est en avance par..." => Vous avez besoin de pousser pour le maître. Exécuter "git diff origin/master" pour voir quelles sont les différences entre votre dépôt local et le distant référentiel maître.


Espérons que cela aide d'autres débutants.

(Aussi, je reconnais qu'il y a de la configuration des subtilités qui peuvent invalider partiellement cette solution, comme le fait que le maître ne peut pas réellement être "à distance", et que "l'origine" est un reconfigurable nom utilisé par convention, etc. Mais les débutants ne se soucient pas de ce genre de chose. Nous voulons simples, des réponses simples. Nous pouvons lire sur les subtilités plus tard, une fois que nous avons résolu le problème pressant.)

Earl

194voto

dbr Points 66401

1. Trouver où Git pense 'origin/master' est à l'aide de git-remote

git remote show origin

..qui vous permettra de revenir à quelque chose comme..

* remote origin
  URL: me@remote.example.com:~/something.git
  Remote branch merged with 'git pull' while on branch master
    master
  Tracked remote branch
    master

Une télécommande est en fait un lien vers un dépôt distant. Quand vous faites..

git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle

..git va pousser des modifications à cette adresse que vous avez ajouté. C'est comme un signet, pour les dépôts distants.

Lorsque vous exécutez git status, il vérifie si la distance est manquant s'engage (par rapport à votre dépôt local), et si oui, en combien de livraisons. Si vous poussez de toutes vos modifications de "l'origine", les deux seront synchronisés, de sorte que vous ne obtenez ce message.

2. Si elle est quelque part d'autre, comment puis-je allumer mon portable dans le 'origin/master'?

Il n'y a pas de raison de faire cela. Dire "origine" est renommé "ordinateur portable" - vous ne voulez jamais faire git push laptop partir de votre ordinateur portable.

Si vous souhaitez supprimer l'origine à distance, de faire..

git remote rm origin

Cette habitude de supprimer quoi que ce soit (en termes de fichier-content/révision-histoire). Cela va arrêter le "votre branche est en avance par.." le message, puisqu'il n'aura plus comparez votre dépôt avec la distance (car il est parti!)

Une chose à retenir est qu'il n'y a rien de spécial à propos de origin, c'est juste un nom par défaut, git utilise.

Git utilise origin par défaut lorsque vous faites des choses comme git push ou git pull. Donc, si vous avez une télécommande que vous utilisez beaucoup (Unfuddle, dans votre cas), je vous recommande l'ajout de unfuddle comme "origine":

git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

ou le faire à la ci-dessus en une seule commande à l'aide de set-url:

git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git

Ensuite, vous pouvez simplement faire git push ou git pull mettre à jour, au lieu de git push unfuddle master

38voto

Mims H. Wright Points 1979

J'ai eu un problème similaire où mon répertoire de travail a ahead of origin by X commits mais l' git pull résultant Everything up-to-date. J'ai réussi à le résoudre en suivant ces conseils. Je poste ici au cas où il permet à quelqu'un d'autre avec un problème similaire.

La base fix est comme suit:

$ git push {remote} {localbranch}:{remotebranch}

Où les mots entre crochets doit être remplacé par votre nom, votre succursale locale de nom et de votre télécommande nom de la branche. par exemple

$ git push origin master:master

24voto

chim Points 1799

Parfois, il existe une différence entre la version locale mise en cache du maître d'origine (origine / maître) et le véritable maître d'origine.

Si vous exécutez git remote update cela va resynchroniser le maître d'origine avec l'origine / le maître

voir la réponse acceptée à cette question

Différences entre git pull origine master et git pull origine / master

9voto

Aristotle Pagaltzis Points 43253

Je pensais que mon portable était à l'origine...

C'est le genre de non-sens: origin se réfère à la distance par défaut référentiel – le fetch/tirer les changements d'autres personnes.

Comment puis-je:

  1. git remote -v va vous montrer ce qu' origin ; origin/master est votre "signet" pour le dernier état connu de l' master direction générale de l' origin dépôt, et votre propre master est un suivi de la direction générale pour l' origin/master. C'est tout ce qu'il devrait l'être.

  2. Vous n'avez pas. Au moins, il n'a pas de sens pour un dépôt par défaut dépôt distant pour lui-même.

  3. Il n'est pas. Il s'agit simplement de vous dire que vous avez fait tant et si beaucoup s'engage localement qui ne sont pas dans le dépôt distant (selon le dernier état connu de ce référentiel).

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