git
est comme UNIX. Convivial mais pointilleux sur ses amis. Il est à peu près aussi puissant et aussi convivial qu'un pipeline shell.
Cela dit, une fois que vous comprenez ses paradigmes et ses concepts, il a la même clarté zen que j'attends des outils de ligne de commande UNIX. Vous devriez envisager de prendre un peu de temps pour lire l'un des nombreux bons tutoriels git disponibles en ligne. Le livre Pro Git est un bon point de départ.
Pour répondre à votre première question.
Quel est git remote add ...
Comme vous le savez probablement, git
est un système de contrôle de version distribué. La plupart des opérations se font localement. Pour communiquer avec le monde extérieur, git
utilise ce qu'on appelle remotes
. Ce sont des référentiels autres que celui de votre disque local dans lesquels vous pouvez effectuer push
vos modifications (afin que d'autres personnes puissent les voir) ou pull
depuis (afin que vous puissiez obtenir d'autres modifications). La commande git remote add origin [email protected]:peter/first_app.git
crée une nouvelle télécommande appelée origin
située à [email protected]:peter/first_app.git
. Une fois que vous faites cela, dans vos commandes push, vous pouvez pousser vers origin
au lieu de taper l'URL entière.
Quel est git push origin master
Il s'agit d'une commande qui dit "pousser les validations dans la branche locale nommée master
vers la télécommande nommée origin
". Une fois que cela est exécuté, toutes les choses que vous avez synchronisées pour la dernière fois avec l'origine seront envoyées au référentiel distant et d'autres personnes pourront les voir là-bas.
Maintenant sur les transports (c'est-à-dire ce que git://
) signifie. Les URL de référentiel distant peuvent être de plusieurs types ( file://
, https://
etc.). Git s'appuie simplement sur le mécanisme d'authentification fourni par le transport pour s'occuper des autorisations et des trucs. Cela signifie que pour les file://
URL, il s'agira d'autorisations de fichiers UNIX, etc. Le git://
schéma demande à git d'utiliser son propre protocole de transport interne, qui est optimisé pour envoyer des ensembles de modifications git. Quant à l'URL exacte, c'est comme ça à cause de la façon dont github a configuré son git
serveur.
Maintenant la verbosité. La commande que vous avez tapée est la commande générale. Il est possible de dire à git quelque chose comme "la branche appelée master
ici est le miroir local de la branche appelée foo
sur la télécommande appelée bar
". En git parler, cela signifie que les master
pistes bar/foo
. Lorsque vous clonez pour la première fois, vous obtiendrez une branche appelée master
et une télécommande appelée origin
(d'où vous avez cloné) avec le maître local défini pour suivre le maître à l'origine. Une fois que cela est configuré, vous pouvez simplement dire git push
et ça le fera. La commande plus longue est disponible au cas où vous en auriez besoin (par exemple, elle git push
peut être poussée vers le dépôt public officiel et git push review master
peut être utilisée pour pousser vers une télécommande distincte que votre équipe utilise pour réviser le code). Vous pouvez définir votre succursale comme succursale de suivi à l'aide du--set-upstream
option de la git branch
commande.
J'ai l'impression que git (contrairement à la plupart des autres applications que j'ai utilisées) est mieux compris de l'intérieur. Une fois que vous comprenez comment les données sont stockées et conservées dans le référentiel, les commandes et ce qu'elles font deviennent limpides. Je suis d'accord avec vous qu'il y a un certain élitisme parmi de nombreux git
utilisateurs, mais j'ai également constaté cela avec les utilisateurs UNIX il était une fois, et cela valait la peine de les dépasser pour apprendre le système. Bonne chance!
[email protected]:peter/first_app.git
s'agit de lascp
syntaxe -style pour les URL ssh dans git. Un autre point est que, par défaut, la configuration en amont demaster
n'affecte pas le comportement degit push
sauf si vous avezpush.default
défini surtracking
(ouupstream
dans des versions ultérieures) - J'ai fait un article de blog sur cette source de confusion: longair.net/blog/2011 / 02/27 /…push.default
la configuration en amont serait utilisée pour trouver la télécommande par défaut lorsque vous utilisezgit push
, mais n'affecterait pas le mappage des références.Mise à jour: notez que la réponse actuellement acceptée perpétue un malentendu commun sur le comportement de
git push
, qui n'a pas été corrigé malgré un commentaire le signalant.Votre résumé de ce que sont les télécommandes - comme un surnom pour l'URL d'un référentiel - est correct.
Les deux URL que vous avez mentionnées indiquent que deux protocoles de transport différents doivent être utilisés. Celui qui commence par
git://
est pour le protocole git, qui est généralement utilisé uniquement pour l'accès en lecture seule aux référentiels. L'autre,,[email protected]:peter/first_app.git
est l'une des différentes façons de spécifier l'accès à un référentiel via SSH - c'est la "syntaxe de style scp" décrite dans la documentation . Le nom d'utilisateur dans la syntaxe de style scpgit
est dû à la façon dont GitHub traite l'identification des utilisateurs - essentiellement ce nom d'utilisateur est ignoré, et l'utilisateur est identifié en fonction de la paire de clés SSH qu'ils ont utilisée pour s'authentifier.Quant à la verbosité de
git push origin master
, vous avez remarqué qu'après la première poussée, vous pouvez alors simplement le fairegit push
. Cela est dû à une série de valeurs par défaut difficiles à retenir mais généralement utiles :)remote.master.url
dans votre cas) est utilisée. Si ce n'est pas configuré, alorsorigin
est utilisé.master
,master:my-experiment
etc.) spécifié, alors git par défaut pousse toutes les branches locales qui ont le même nom qu'une branche sur la télécommande. Si vous avez juste une branche appeléemaster
en commun entre votre référentiel et la distante, ce sera la même chose que de pousser votremaster
vers la télécommandemaster
.Personnellement, comme j'ai tendance à avoir plusieurs branches thématiques (et souvent plusieurs télécommandes) j'utilise toujours le formulaire:
... pour éviter de pousser accidentellement d'autres branches.
En réponse à vos commentaires sur l' un des autres réponses, il me semble que si on apprend au sujet git d'une manière descendante très efficace - vous avez découvert que les paramètres par défaut de travail, et votre question pose de savoir pourquoi;) Pour être plus sérieux, git peutêtre utilisé essentiellement aussi simplement que SVN, mais en savoir un peu sur les télécommandes et les branches signifie que vous pouvez l'utiliser de manière beaucoup plus flexible et cela peut vraiment changer votre façon de travailler pour le mieux. Votre remarque sur un cours de semestre me fait penser à quelque chose que Scott Chacon a dit dans une interview en podcast - les étudiants apprennent toutes sortes d'outils de base en informatique et en génie logiciel, mais très rarement le contrôle de version. Les systèmes de contrôle de version distribués tels que git et Mercurial sont maintenant si importants et si flexibles qu'il serait utile de leur donner des cours pour donner aux gens une bonne base.
À mon avis
git
, avec , cette courbe d'apprentissage en vaut vraiment la peine - travailler avec de nombreuses branches de sujets, les fusionner facilement et les pousser et les déplacer entre différents référentiels est incroyablement utile une fois que vous avez confiance en le système. Il est juste dommage que:la source
Jetez un œil à la syntaxe pour ajouter un référentiel distant.
Exemple:
Disséquons la commande:
git remote ceci est utilisé pour gérer vos serveurs centraux pour l'hébergement de vos dépôts git.
Peut-être que vous utilisez Github pour votre contenu de référentiel central. Je vais vous donner un exemple et expliquer l' origine git add distance commande
Supposons que je travaille avec GitHub et BitBucket pour les serveurs centraux des référentiels git et que j'ai créé des référentiels sur les deux sites Web pour mon projet de première application .
Maintenant, si je veux pousser mes modifications sur ces deux serveurs git, je devrai dire à git comment accéder à ces référentiels centraux. Je vais donc devoir les ajouter,
Pour GitHub
Et pour BitBucket
J'ai utilisé deux variables (pour autant qu'il soit facile pour moi de les appeler variables) gh_origin (gh FOR GITHUB) et bb_origin (bb pour BITBUCKET) juste pour vous expliquer que nous pouvons appeler origine tout ce que nous voulons.
Maintenant, après avoir apporté quelques modifications, je devrai envoyer (pousser) toutes ces modifications aux référentiels centraux afin que les autres utilisateurs puissent voir ces modifications. Alors j'appelle
Pousser vers GitHub
Pousser vers BitBucket
gh_origin détient la valeur de https://github.com/user/first-app-git.git et bb_origin détient la valeur de https: //[email protected]/user/first-app-git.git
comme chaque fois que je dois envoyer mes modifications de code, je dois utiliser ces mots au lieu de me souvenir ou de taper l'URL pour le même.
La plupart du temps, vous ne verrez rien, sauf l' origine, car la plupart du temps, vous ne traiterez qu'avec un seul référentiel central comme Github ou BitBucket par exemple.
la source
À
.git
la fin du nom du référentiel est juste une convention. En règle générale, sur les serveurs git, les référentiels sont conservés dans des répertoires nommésproject.git
. Le client et le protocole git respectent cette convention en testantproject.git
lorsque seulproject
est spécifié.git://[email protected]/peter/first_app.git
n'est pas une URL git valide. les référentiels git peuvent être identifiés et accessibles via divers schémas d'url spécifiés ici .[email protected]:peter/first_app.git
est l'ssh
URL mentionnée sur cette page.git
est flexible. Il vous permet de suivre votre branche locale contre presque toutes les branches de n'importe quel référentiel. Bien que lemaster
suivi (de votre branche par défaut locale)origin/master
(la branche par défaut distante) soit une situation courante, il n'est pas universel. Plusieurs fois, vous ne voudrez peut-être pas faire cela. C'est pourquoi le premiergit push
est si bavard. Il indique à git quoi faire avec lamaster
branche locale lorsque vous faites ungit pull
ou ungit push
.La valeur par défaut pour
git push
etgit pull
est de travailler avec la télécommande de la branche actuelle. C'est un meilleur défaut que le maître d'origine. La façon dont git push détermine cela est expliquée ici .git
est assez élégant et compréhensible mais il y a une courbe d'apprentissage à parcourir.la source
git push
n'utilise pas les variables de configuration définiesgit branch/checkout --track
pour déterminer la référence distante à laquelle pousser. Vous avez raison, Git Pull les utilise cependant.Git remote add origin:
Il centralise votre code source dans les autres projets.Il est développé sur la base de Linux, open source complet et rend votre code utile aux autres utilisateurs de git.Nous l'appelons comme référence
Pousse votre code dans le référentiel git en utilisant l'url distante du hub git.
la source