Comment trouver le lieu d'origine / maître dans git et comment puis-je le changer?
-
07-07-2019 - |
Question
Je suis un novice Git. J'ai récemment déplacé un projet Rails de Subversion vers 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 également unfuddle.com pour stocker mon code. J'apporte des modifications sur mon ordinateur portable Mac dans le train pour me rendre au travail, puis je les pousse à me désencombrer lorsque j'ai une connexion réseau à l'aide de la commande suivante:
git push unfuddle master
J'utilise Capistrano pour les déploiements et extrait le code du référentiel des fichiers compliqués à l'aide de la branche principale.
Dernièrement, j'ai remarqué le message suivant lorsque j'exécute " 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 ordinateur portable était à l'origine ... mais je ne sais pas si c'est le fait que j'ai tiré de Subversion ou que j'ai poussé vers Unfudddle qui est à l'origine du message. Comment puis-je:
- Découvrez où Git pense que "l'origine / le maître" se trouve?
- Si c'est ailleurs, comment puis-je transformer mon ordinateur portable en "origine / maître"?
- Faites que ce message disparaisse. Cela me fait penser que Git est mécontent de quelque chose.
Mon Mac exécute Git version 1.6.0.1.
Lorsque j'exécute l'origine de l'émission distante git
comme suggéré par dbr, j'obtiens les informations suivantes:
~/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 Aristotle 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, curieusement, je travaille sur mon projet dans le répertoire geekfor
, mais il indique 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 vers Git et probablement l'endroit où j'ai poussé pour éviter de déranger. Ensuite, je pense avoir extrait une nouvelle copie de unfuddle dans le répertoire geekfor
.
Il semble donc 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
La solution
1.
Découvrez où Git pense que "l'origine / le maître" utilisegit-remote
git remote show origin
.. qui retournera 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 référentiel distant. Quand tu le fais ..
git remote add unfuddle me@unfuddle.com/myrepo.git
git push unfuddle
.. git appliquera les modifications à l'adresse que vous avez ajoutée. C'est comme un signet pour les dépôts distants.
Lorsque vous exécutez git status
, il vérifie s'il manque des validations à distance (par rapport à votre référentiel local) et, dans l'affirmative, par combien de validations. Si vous transmettez toutes vos modifications à "origine", les deux seront synchronisés, vous ne recevrez donc pas ce message.
2.
Si c'est ailleurs, comment puis-je transformer mon ordinateur portable en "origine / maître"?
Cela ne sert à rien. Dites " origine " est renommé " ordinateur portable " - vous ne voulez jamais faire ordinateur portable git push
à partir de votre ordinateur portable.
Si vous souhaitez supprimer la télécommande d'origine, vous devez le faire ..
git remote rm origin
Ceci ne supprimera rien (en termes de fichier-contenu / versions-historique). Cela arrêtera le " votre agence est en avance de .. " message, car il ne comparera plus votre référentiel avec la télécommande (car il est parti!)
Une chose à retenir est que origine
n'a rien de spécial, il s'agit simplement d'un nom par défaut utilisé par git.
Git utilise origine
par défaut lorsque vous effectuez des opérations telles que git push
ou git pull
. Donc, si vous avez une télécommande que vous utilisez beaucoup (Unfuddle, dans votre cas), je vous recommanderais d’ajouter unfuddle comme "origine":
git remote rm origin
git remote add origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
ou faites ce qui précède en une seule commande en utilisant set-url:
git remote set-url origin git@subdomain.unfuddle.com:subdomain/abbreviation.git
Ensuite, vous pouvez simplement faire git push
ou git tirer
pour mettre à jour, au lieu de git push unfuddle master
Autres conseils
Je suis arrivé à cette question en cherchant une explication sur le message "votre succursale est en avance de ...". signifie, dans le régime général de git. Il n'y avait pas de réponse à cela ici, mais comme cette question est actuellement affichée en haut de Google lorsque vous recherchez l'expression "Votre succursale est en avance sur" origine / maître "", et depuis, j'ai compris quel était le message. signifie vraiment, je pensais que je posterais l'info ici.
Donc, étant un novice git, je peux voir que la réponse dont j'avais besoin était une réponse distinctement novice. Plus précisément, quels sont les "& votre; agence est en avance sur ..." expression signifie qu'il y a des fichiers que vous avez ajoutés et engagés dans votre référentiel local, mais que vous n'avez jamais poussés à l'origine. L'intention de ce message est en outre obscurcie par le fait que "git diff", du moins pour moi, ne présentait aucune différence. Ce n’est que lorsque j’ai exécuté "git diff origin / master". on m'a dit qu'il y avait des différences entre mon référentiel local et le maître distant.
Donc, pour être clair:
"Votre agence est en avance sur ..." = > Vous devez pousser le maître distant. Exécutez "git diff origin / master" pour connaître les différences entre votre référentiel local et le référentiel maître distant.
J'espère que cela aidera d'autres débutants.
(En outre, je reconnais que certaines subtilités de configuration peuvent invalider partiellement cette solution, telles que le fait que le maître ne soit pas réellement "distant" et que "origine" soit un nom reconfigurable utilisé par convention, etc. Mais les débutants ne se soucient pas de ce genre de choses. 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 à celui-ci où mon répertoire de travail était en avance sur l'origine par X commits
, mais le git pull
entraînait à ce jour
. J'ai réussi à résoudre ce problème en suivant cet avis . Je poste ceci ici au cas où cela aiderait quelqu'un d'autre avec un problème similaire.
Le correctif de base est le suivant:
$ git push {remote} {localbranch}:{remotebranch}
Les mots entre crochets doivent être remplacés par votre nom distant, le nom de votre branche locale et le nom de votre branche distante. par exemple
$ git push origin master:master
Parfois, il y a une différence entre la version en cache locale du maître d'origine (origine / maître) et le maître d'origine véritable.
Si vous exécutez la mise à jour à distance git
, cela resynchronisera le maître d'origine avec l'origine / maître
voir la réponse acceptée à cette question
Différences entre git pull origin master & amp; git pull origine / master
Je pensais que mon ordinateur portable était à l'origine & # 8230;
Ce genre de non-sens est: origine
fait référence au référentiel distant par défaut & # 8211; celui que vous récupérez / tirez habituellement des modifications des autres personnes.
Comment puis-je:
-
git remote -v
vous montrera quelorigine
est;origine / maître
correspond à votre & # 8220; signet & # 8221; pour le dernier état connu de la branchemaître
du référentielorigine
, et votre propremaître
est un branche de suivi pourorigine / maître
. C'est tout comme il se doit . -
vous n’êtes pas. Au moins, cela n’a aucun sens d’être un référentiel distant par défaut pour lui-même.
-
Ce n'est pas & # 8217; t. Cela signifie simplement que vous avez effectué un tel nombre de commits localement qui ne figurent pas dans le référentiel distant (selon le dernier état connu de ce référentiel).
[Solution]
$ git push origin
^ cela l'a résolu pour moi. Ce qu’il a fait, il a synchronisé mon maître (sur un ordinateur portable) avec "origine". c'est sur le serveur distant.
Je me bats avec ce problème et aucune des réponses précédentes n’aborde la question telle que je la vois. J'ai réduit le problème à l'essentiel pour voir si je pouvais clarifier mon problème.
Je crée un nouveau référentiel (rep1), y insère un fichier et le valide.
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 l’appelle rep2. Je regarde à l'intérieur de rep2 et vois que le fichier est correct.
cd ~
git clone ~/rep1 rep2
cat ~/rep2/README
Dans rep1, je modifie le fichier et le valide. Ensuite, dans rep1, je crée une télécommande pour pointer vers rep2 et appliquer les modifications.
cd ~/rep1
<change file and commit>
git remote add rep2 ~/rep2
git push rep2 master
Maintenant, lorsque je vais dans rep2 et que je fais un "statut de 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
#
Le fichier README dans rep2 est tel qu’il était à l’origine, avant la deuxième validation. Les seules modifications que j'ai faites sont de rep1 et tout ce que je voulais faire était de les pousser vers rep2. Qu'est-ce que je ne comprends pas?
Il attend que vous "poussiez". Essayez:
$ git push
J'ai eu ce problème récemment et je me suis dit que c'était parce que j'avais supprimé des 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 l’a toujours. (serveur = origine)
J'ai donc couru
git rm $(git ls-files --deleted)
Et puis couru un commit et push.
Cela a résolu le problème.
Je suis un débutant git aussi. J'ai eu le même problème avec les messages "votre branche est en avance sur l'origine / maître par N commits". Faire «git diff origin / master» suggéré a montré quelques diffs que je ne voulais pas garder. Alors ...
Comme mon clone git était destiné à l'hébergement et que je voulais une copie exacte du rapport principal, sans me soucier de conserver les modifications locales, j'ai décidé de sauvegarder mon compte entier et d'en créer un nouveau:
(sur la machine hôte)
mv myrepo myrepo
git clone USER@MASTER_HOST:/REPO_DIR myrepo
Par souci de commodité, j'avais l'habitude d'apporter des modifications au clone sur ma machine d'hébergement. Pas plus. Je vais faire ces changements au maître, git commettre là, et faire un pull git. J'espère que cela devrait garder mon clone git sur la machine d'hébergement complètement synchronisé.
/ Nara
Je me demandais la même chose à propos de mon repo. Dans mon cas, j’avais une vieille télécommande sur laquelle je n’appuyais plus, j’avais donc besoin de la retirer.
Obtenir la liste des télécommandes:
git remote
Supprimez 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 vos propres commits aient lieu.
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)
Utilisez le journal git
pour rechercher la validation que vous aviez avant les modifications locales.
$ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...
commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...
Prenez note des commits locaux et réinitialisez directement à la validation précédente:
git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
J'ai eu le problème "Votre branche est en avance sur" origine / maître "de nn commits." quand j'ai poussé vers un référentiel distant avec:
git push ssh://git@xxx.repositryhosting.com/yyy/zzz.git
Quand j'ai découvert que mon adresse distante était dans le fichier .git / FETCH_HEAD et utilisée:
git push
le problème a disparu.