Comment puis-je trouver le lieu d'origine/maître dans git, et comment puis-je le changer?
je suis un bizut. J'ai récemment transféré un projet rail de Subversion à git. J'ai suivi le tutoriel ici: http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/
j'utilise aussi unfuddle.com pour stocker mon code. Je fais des changements sur mon ordinateur portable Mac dans le train de/vers le travail et puis les pousser à se déployer lorsque j'ai une connexion réseau en utilisant la commande suivante:
git push unfuddle master
J'utilise Capistrano pour les déploiements et je tire le code du dépôt unfuddle en utilisant la branche principale.
dernièrement, J'ai remarqué le message suivant lorsque j'ai lancé" 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 ne comprends pas pourquoi. Je pensais que mon portable était l'origine... mais je ne sais pas si c'est le fait que J'ai initialement tiré de Subversion ou push to Unfuddle qui fait apparaître le message jusqu'. Comment puis-je:
- trouver où git pense que' origine / maître ' est?
- si c'est ailleurs, comment transformer mon ordinateur portable en "Origine/maître"?
- faites disparaître ce message. Ça me fait penser que Git n'est pas content de quelque chose.
mon mac utilise la version 1.6.0.1 de Git.
quand j'exécute git remote show origin
comme suggéré par le dbr, J'obtiens ce qui suit:
~/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
quand je cours git remote -v
comme suggéré par Aristote Pagaltzis, je reçois le 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, fait intéressant, je travaille sur mon projet dans le répertoire geekfor
mais il est dit que mon origine est ma machine locale dans le répertoire gf
. Je crois que gf
était le répertoire temporaire que j'ai utilisé lors de la conversion de mon projet de Subversion en Git et probablement d'où j'ai poussé à me défaire. Alors je crois que j'ai vérifié une nouvelle copie de unfuddle au répertoire geekfor
.
on dirait que je devrais suivre les conseils de dbr et faire:
git remote rm origin
git remote add origin git@spilth.unfuddle.com:spilth/geekfor.git
13 réponses
1.
trouvez où Git pense que 'origine / maître' utilisegit-remote
git remote show origin
..qui rapportera 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 essentiellement un lien vers un dépôt distant. Lorsque vous le faites..
git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle
..git poussera les changements à cette adresse que vous avez ajoutée. C'est comme un signet, pour les dépôts distants.
quand vous lancez git status
, il vérifie si la télécommande manque des propagations (par rapport à votre dépôt local), et si oui, par combien de propagations. Si vous poussez toutes vos modifications sur "origine", les deux seront synchronisées, donc vous n'obtiendrez pas ce message.
2.
si c'est ailleurs, comment transformer mon ordinateur portable en "Origine/maître"?
cela ne sert à rien. Dire "origine" est renommé pour "ordinateur portable" - vous ne voulez jamais à faire git push laptop
à partir de votre ordinateur portable.
si vous voulez supprimer la télécommande d'origine, vous le faites..
git remote rm origin
ceci ne supprimera rien (en termes de contenu de fichier/révisions-historique). Cela empêchera le " votre branche est en avant par.."message, car il ne comparera plus votre dépôt avec la télécommande (parce qu'il est parti!)
Une chose à retenir est qu'il n'y a rien de spécial origin
, c'est juste un nom par défaut que 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 d'ajouter unfuddle comme "origin":
git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
ou faites le ci-dessus dans une commande en utilisant set-url:
git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
alors vous pouvez simplement faire git push
ou git pull
pour mettre à jour, à la place de git push unfuddle master
je suis venu à cette question à la recherche d'une explication sur ce que le message" votre branche est en avance..."s'entend, dans le régime général de l'IGS. Il n'y avait pas de réponse à cela ici, mais puisque cette question apparaît actuellement en haut de Google lorsque vous recherchez la phrase "votre branche est en avance sur 'Origine/maître'", et j'ai depuis compris ce que le message signifie vraiment, j'ai pensé que je voudrais poster l'information ici.
donc, étant un bizut git, je peux voir que la réponse je nécessaire était une réponse distinctement novice. En particulier, ce que la " votre branche est en avance par..."phrase signifie qu'il y a des fichiers que vous avez ajoutés et engagés dans votre dépôt local, mais que vous n'avez jamais poussés à l'origine. L'intention de ce message est encore obscurcie par le fait que "git diff", du moins pour moi, n'a montré aucune différence. Ce n'est que lorsque j'ai lancé "git diff origin/master" qu'on m'a dit qu'il y avait des différences entre mon dépôt local et le Master distant.
Donc, pour être clair:
"votre branche est en avance..." = > vous devez pousser jusqu'au maître distant. Lancez " git diff origin/master " pour voir quelles sont les différences entre votre dépôt local et le dépôt maître distant.
Espérons que cela aide d'autres débutants.
(aussi, je reconnais qu'il y a une configuration subtilités qui peuvent partiellement invalider cette solution, comme le fait que le maître peut ne pas être réellement "distant", et que "origine" est un nom reconfigurable utilisé par convention, etc. Mais les débutants ne se soucient pas de ce genre de chose. Nous voulons des réponses simples et directes. Nous pourrons en savoir plus sur les subtilités plus tard, une fois que nous aurons résolu le problème pressant.)
Earl
j'ai eu un problème similaire où mon répertoire de travail était ahead of origin by X commits
mais le git pull
a été traduit par Everything up-to-date
. J'ai réussi à le corriger en suivant ce conseil . Je poste ça au cas où ça aiderait quelqu'un d'autre avec un problème similaire.
la fixation de base est la suivante:
$ git push {remote} {localbranch}:{remotebranch}
où les mots entre parenthèses doivent être remplacés par votre nom distant, le nom de votre succursale locale et le nom de votre succursale distante. par exemple
$ git push origin master:master
il y a parfois une différence entre la version locale du maître d'origine (Origine/maître) et le vrai maître d'origine.
Si vous l'exécutez git remote update
ce sera resynch origine de maître avec origin/master
voir la réponse acceptée à cette question
les Différences entre la commande git pull origin master & git pull origin/master
je pensais que mon portable était l'origine ...
C'est un peu absurde: origin
se réfère au dépôt distant par défaut – celui dont vous récupérez/retirez les changements des autres.
Comment puis-je:
-
git remote -v
vous montrera ce queorigin
est;origin/master
est votre "marque-page" pour le dernier état connu de lamaster
est une branche du référentielorigin
pourorigin/master
. C'est tout comme . -
vous ne le faites pas. Au moins, cela n'a aucun sens qu'un dépôt soit le dépôt distant par défaut pour lui-même.
-
ce n'est pas le cas. C'est simplement vous dire que vous avez fait un tel-et-tant de commit localement qui ne sont pas dans le dépôt distant (selon le dernier état connu de ce dépôt).
[Solution]
$ git push origin
^ cela l'a résolu pour moi. Ce qu'il a fait, il a synchronisé mon master (sur ordinateur portable) avec "origin" qui est sur le serveur distant.
je suis aux prises avec ce problème et aucune des réponses précédentes n'aborde la question telle que je la vois. J'ai ramené le problème à l'essentiel pour voir si je peux clarifier mon problème.
je crée un nouveau dépôt (rep1), y mets un fichier et le commute.
mkdir rep1
cd rep1
git init
echo "Line1" > README
git add README
git commit -m "Commit 1"
je crée un clone de rep1 et je l'appelle rep2. Je regarde dans rep2 et je vois que le fichier est correct.
cd ~
git clone ~/rep1 rep2
cat ~/rep2/README
Dans rep1-je faire un seul modifier le fichier et de le valider. Puis dans rep1 je crée une télécommande pour pointer vers rep2 et pousser les changements.
cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master
maintenant quand je vais dans rep2 et que je fais un 'statut git', on me dit que je suis en avance sur l'origine.
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README
#
README dans rep2 est comme il a été à l'origine, avant que le second s'engager. Les seules modifications que j'ai faites concernent rep1 et tout ce que je voulais, c'était les pousser vers rep2. Qu'est-ce que je ne suis pas saisir?
j'ai eu ce problème récemment et j'ai pensé que c'était parce que j'avais supprimé certains fichiers dont je n'avais plus besoin. Le problème est que git ne sait pas que les fichiers ont été supprimés et il voit que le serveur a encore. (server = origine)
Alors j'ai couru
git rm $(git ls-files --deleted)
et a ensuite lancé un commit and push.
Qui a résolu le problème.
je suis aussi un bizut. J'ai eu le même problème avec les " votre branche est en avance sur origin/master par N engage messages. Faire le 'git diff origin/master' suggéré a montré quelques diffs que je ne me souciais pas de garder. Si. ..
étant donné que mon clone git était pour l'hébergement, et que je voulais une copie exacte du master repo, et que je ne me souciais pas de garder les changements locaux, j'ai décidé d'économiser tout mon repo, et d'en créer un nouveau:
(sur la machine d'accueil)
mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo
pour plus de commodité, j'ai utilisé pour faire des changements au clone sur ma machine d'accueil. Pas plus. Je vais faire ces changements au maître, git commit là, et faire une git pull. Avec un peu de chance, cela devrait garder mon clone git sur la machine d'hébergement en parfaite synchronisation.
/ Nara
je me demandais la même chose à propos de ma pension. Dans mon cas, j'avais une vieille télécommande que je ne poussais plus alors j'ai dû l'enlever.
Obtenir la liste des télécommandes:
git remote
supprimer celui dont vous n'avez pas besoin
git remote rm {insert remote to remove}
il est possible de réinitialiser à un commit spécifique avant que votre propre commits ait lieu.
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)
utilisez git log
pour trouver ce que commit était le commit que vous aviez avant les changements locaux ont eu lieu.
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
prendre note de la propagation locale et réinitialiser directement à la propagation précédente:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
j'ai eu le problème "Votre branche est en avance de 'origin/master' par nn s'engage."quand j'ai poussé à un dépôt distant avec:
git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git
quand j'ai trouvé que mon adresse distante était dans le fichier .git / FETCH_HEAD et utilisé:
git push
le problème a disparu.