Mise à jour : notez que la réponse actuellement acceptée perpétue un malentendu courant 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 remotes - comme un surnom pour l'URL d'un dépôt - est correct.
Alors pourquoi l'URL n'est-elle pas git://git@github.com/peter/first_app.git, mais dans l'autre syntaxe - quelle syntaxe est-ce ? Pourquoi doit-elle se terminer par .git ? J'ai essayé de ne pas utiliser .git à la fin et cela fonctionne aussi. Si ce n'est pas .git, que peut-il être d'autre ? Le git au début semble être un compte utilisateur sur le serveur Git ?
Les deux URLs que vous avez mentionnées indiquent que deux protocoles de transport différents doivent être utilisés. Celui commençant par git://
est pour le protocole Git, qui est généralement utilisé uniquement pour un accès en lecture aux dépôts. L'autre, git@github.com:peter/first_app.git
, est l'une des différentes façons de spécifier l'accès à un dépôt via SSH - il s'agit de la "syntaxe de style scp" décrite dans la documentation. Le fait que le nom d'utilisateur dans la syntaxe de style scp soit git
est dû à la façon dont GitHub identifie les utilisateurs - essentiellement ce nom d'utilisateur est ignoré, et l'utilisateur est identifié en fonction de la paire de clés SSH qu'il a utilisée pour s'authentifier.
Quant à la verbosité de git push origin master
, vous avez remarqué qu'après le premier push, vous pouvez simplement faire git push
. Cela est dû à une série de paramètres par défaut difficiles à mémoriser mais généralement utiles :)
- Si aucun remote n'est spécifié, le remote configuré pour la branche actuelle (dans
remote.master.url
dans votre cas) est utilisé. Si ce n'est pas configuré, alors origin
est utilisé.
- Si aucune "refspec" (par exemple
master
, master:my-experiment
, etc.) n'est spécifiée, Git a pour défaut de pousser chaque branche locale qui a le même nom qu'une branche sur le remote. Si vous avez simplement une branche appelée master
en commun entre votre dépôt et celui du remote, cela reviendra au même que de pousser votre master
vers le remote master
.
Personnellement, comme j'ai tendance à avoir de nombreuses branches thématiques (et souvent plusieurs remotes), j'utilise toujours la forme suivante :
git push origin master
... pour éviter de pousser accidentellement d'autres branches.
En réponse à vos commentaires sur l'une des autres réponses, j'ai l'impression que vous apprenez Git de manière très efficace de haut en bas - vous avez découvert que les paramètres par défaut fonctionnent, et votre question porte sur pourquoi ;) Pour être plus sérieux, Git peut être utilisé de manière aussi simple que SVN, mais savoir un peu sur les remotes et les branches vous permet de l'utiliser de manière beaucoup plus flexible et cela peut vraiment changer votre façon de travailler en mieux.
Votre remarque sur un cours d'un semestre me fait penser à ce que Scott Chacon a dit dans une interview de podcast - les étudiants apprennent à utiliser 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 comme Git et Mercurial sont désormais si importants, et si flexibles, qu'il serait utile d'enseigner des cours sur eux pour donner aux gens des bases solides.
À mon avis, avec git
, cette courbe d'apprentissage en vaut vraiment la peine - travailler avec de nombreuses branches thématiques, les fusionner facilement, et les pousser et les tirer entre différents dépôts est fantastiquement utile une fois que vous avez confiance dans le système. C'est juste dommage que :
- La documentation principale de Git soit si difficile à comprendre pour les nouveaux arrivants. (Bien que je ferais valoir que si vous cherchez presque n'importe quelle question sur Git, des tutoriels utiles (ou des réponses Stack Overflow :)) apparaissent de nos jours.)
- Il y a quelques comportements étranges dans Git qui sont difficiles à changer maintenant parce que de nombreux scripts peuvent s'appuyer sur eux, mais qui sont déroutants pour les gens.