[résolu] xcode problème avec source control

mybofymybofy Membre
août 2013 modifié dans API AppKit #1

Bonjour


Xcode 4.6.1.


 


Depuis quelque temps, j'essaie d'utiliser Source Control. ça marche, et puis ça ne marche plus.


La fenêtre de Commit comporte trois colonnes.


La première comporte : 

Réponses

  • ProGit, l'incontournable livre de Scott Chacon traduit en français et en téléchargement gratuit.


  • AliGatorAliGator Membre, Modérateur
    Perso ça fait une paye que j'ai arrêté d'utiliser le Source Control intégré à  Xcode.

    SourceTree est un must pour gérer les repositories GIT (et Mercurial et Git-SVN), je ne peux plus m'en passer il sait tout faire et est très bien fait, et en plus il est gratuit !
  • Je reviens en essayant SourceTree.


     


    J'ai créé un repository Jardin sur Github.


    Je veux pousser le répertoire Jardin (app cocoa local) sur le repository Jardin de Github:


       https://github.com/mybofy/Jardin


    J'obtiens :



    git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags Jardin master:master
    Pushing to git@github.com:mybofy/jardin.git
    Permission denied (publickey).

    Il y a sans doute un problème d'identification ?


     


    Comme toujours, c'est le degré 0 pour démarrer qui me pose problème...


     


    Merci de l'aide.


  • AliGatorAliGator Membre, Modérateur
    août 2013 modifié #5
    C'est normal (et ça c'est pas dû à  SourceTree en particulier), normalement tu auras la même erreur avec le SourceControl de Xcode ou même en ligne de commande. C'est dû au fait que tu utilises une URL de type "git@github.com:..." qui est une URLs SSH. Du coup il faut te créer une paire de clés publique/privées sur ta machine, et fournir la clé publique à  GitHub, pour qu'il te reconnaisse et t'autorise/te donne les droits ensuite pour faire un push.

    Toute la procédure est expliquée dans l'aide de GitHub ici

    Tu peux aussi utiliser une URL de type HTTPS plutôt qu'utiliser SSH pour pousser ton code sur GitHub. Dans ce cas l'URL ne sera pas de type git@github.com:mybofy/jardin.git mais https://github.com/mybofy/jardin.git et tu auras plutôt besoin d'un login/mot de passe pour t'authentifier (du moins la première fois, tu pourras mémoriser le mdp ensuite pour les fois suivantes) plutôt qu'une paire de clés SSH.
    Pour ça, les instructions détaillées sont ici dans l'aide GitHub.

    Perso j'utilise plutôt les URLs SSH (comme celle que tu as utilisé, donc), et donc des clés publiques/privées. Et même si veux plutôt utiliser les URLs HTTPS, si tu utilises SourceTree et pas trop la ligne de commande, je pense que tu peux alors te passer de toute la partie "password caching" expliquée dans l'aide GitHub, car SourceTree sais sans doute stocker tes mots de passe GIT directement tout seul dans ta Keychain.
  • Si je ne m'abuse avec la dernière version de git tu peux même enregistrer ton couple login/mot de passe dans le trousseau d'accès ce qui te permet de plus avoir à  le rentrer par la suite.


  • AliGatorAliGator Membre, Modérateur
    @Nasatya bah oui c'est tout expliqué dans les liens que j'ai donné justement ! (Et j'en parle dans mon message, où j'évoque le "password caching"...) ;)
  • J'avais zappé la fin:( J'étais tellement content quand j´ai trouvé l'option que je voulais absolument partager tout ça ;)
  • mybofymybofy Membre
    août 2013 modifié #9

    Je n'arrive pas à  utiliser SourceTree : aucun tutoriel (je refuse les tutoriels vidéo qui font plaisir à  leurs auteurs et à  google, mais sont inutilisables en pratique) ; confusion totale entre : dépôts multiples, path, url, clone, copie de travail, etc., tout ça non défini. Bref interface inutilisable pour moi. Bien sûr,  ça ne doit poser aucun problème pour un utilisateur averti de SourceTree.


     


    J'ai trouvé une solution de bricolage. Est-elle valable ?


     


    Je crée un dépôt Herbier dans GitHub.


     


    Dans Xcode  : mon projet, ici Herbier, avec git à  la création.


    Je fais run.


    Je fais file > source control > commit


    Je décoche "User Interface State" et je commit : résultat OK.


    Mais évidemment le push plante... car fichiers non commited.


     


    Dans le répertoire de Herbier, j'ai un .gitignore qui cache Herbier.xcodeproj.


     


    Je vais dans le terminal.


    Je fais (comme indiqué lors de la création du dépôt Herbier dans GitHub)



    git remote add origin git@github.com:mybofy/Herbier.git
    git push -u origin master
     

    Et miracle, ça apparaà®t : github.com/mybofy/Herbier


     


    Qui pourrais me proposer la même procédure ultra-simple avec SourceTree ? Après je me débrouillerai tout seul !


     


    Merci.

  • AliGatorAliGator Membre, Modérateur
    août 2013 modifié #10
    Hello,

    1) Je te conseille VIVEMENT de passer SourceTree en anglais. Parce que bon, les termes techniques de git (commit, pull, push, checkout, ...) doivent déjà  être assimilés pour un utilisateur pas forcément habitué à  GIT, mais au moins ce sont des termes connus et communs que ce soit dans Xcode, SourceTree, ligne de commande..., alors que traduits en français, c'est parfois des traductions pas super claires ("récupérer", "envoyer"... ?!) et tu ne vois pas forcément la correspondance avec le terme technique officiel de GIT. Au moins en anglais les termes sont cohérents avec les termes que tu vois partout quand tu fais du Source Control / du GIT

    Pour passer SourceTree en anglais, rien de plus simple, vas dans les préférences de SourceTree, dans l'onglet Général tu choisis la langue (English) et tu quittes et relance SourceTree.

    2) Pour reproduire tes étapes pour pousser Herbier avec SourceTree, tu as plein de possibilités :
    • Pour ajouter un remote avec SourceTree (l'équivalent de ton "git remote add origin URL"), tu ouvres le dossier de ton repo GIT dans SourceTree, et dans la fenêtre du repo tu vas en haut à  droite dans le bouton "Settings". Là  tu as un onglet dédié à  l'ajout de remotes. Il suffit donc de cliquer sur le bouton "Add", de renseigner "origin" dans le champ "Name", et "git@github.com:mybody/Herbier.git" dans le champ "URL".
    • [-A-] Pour ajouter des fichiers à  commiter : tu vas dans la partie "Working Copy" à  gauche et tu fais glisser les fichiers que tu veux commiter de la zone du bas ("Files in the working tree") vers la partie du haut ("Files staged in the index"). Ou alors si tu préfères, tu sélectionnes les fichiers que tu veux commiter, et tu cliques sur le bouton "Add", au choix. Ces 2 étapes sont équivalentes, elles correspondent à  un "git add" dans le terminal, ou à  de cocher un fichier dans Xcode.
    • [-B-] Pour commiter localement tous les fichiers que tu as ajouté, il suffit de cliquer sur le bouton "Commit" et de renseigner un message de commit et valider.
    • [-C-] Pour pousser tes commits locaux sur GitHub, il suffit de cliquer sur le bouton "Push". Cela correspond à  un "git push" dans le terminal.
    Tu peux également faire toutes ses étapes en une seule si tu veux : en cliquant sur le bouton "Commit", dans la boite de dialoque qui s'affiche pour te demander le message de commit, tu peux :
    • Choisir de modifier les fichiers à  commiter (ce que tu fais sinon avec l'étape [-A-] plus haut).
    • Tu peux même si tu préfères, plutôt que d'être en commit mode "Staged changes" avec les 2 zones (en bas fichiers non commités, en haut fichiers commités), passer en commit mode "Selected Files" et te retrouver avec une zone unique et des cases à  cocher, comme tu as dans Xcode, si tu préfères. C'est au choix.
    • Tu peux aussi cocher la case "Push commits immediately to origin" avant de valider ton commit, pour qu'il fasse un "git push" automatiquement après ton commit et éviter l'étape [-C-].
    Au final, comme dans tout process pour utiliser un repository GIT, que ce soit via le terminal ou via SourceTree ou autre, tu as toujours les 3 étapes incontournables : ajouter les fichiers que tu veux commiter, faire ton commit local, et pousser le commit sur le remote (sur GitHub, donc).

    Au final SourceTree te permet de faire ça en 3 étapes séparées, pour marquer comme "à  commiter" certains fichiers que tu sais qu'il te faudra commiter mais sans faire le commit tout de suite pour autant par exemple... ou tout en une seule avec juste le bouton "Commit". Ou en 2 étapes (add d'abord puis commit+push d'un coup, ou add+commit d'un coup, puis push). Avec des cases à  cocher ou avec les Staging Area.

    Avec Xcode, je crois (j'ai pas utilisé son outil de SourceControl intégré depuis une éternité) que tu peux pas séparer le "commit" (étape [-B-]) du "push" (étape [-C-]), perso je trouve ça dommage. Avec SourceTree t'as le choix de cocher la case "immediately push after commit" pour faire comme Xcode... ou pas et faire le push toi-même, pratique pour faire plusieurs commits en série (surtout si tu as un serveur d'intégration continue derrière qui déclenche un build à  chaque push !).

    Perso je préfère faire les choses en 3 étapes, d'autant que je préfère faire plein de petits commits et tout pusher ensuite d'un coup plutôt que pusher à  chaque fois, et pour les fichiers à  stager souvent je préfère pas mettre toutes mes modifs dans un même commit voir commiter que des parties de fichier (GIT permet ça et SourceTree aussi, avec une interface bien foutue pour ça aussi), donc normal que je préfère décomposer.
    Mais je comprend qu'il y en ait qui préfèrent faire tout d'un coup, et c'est possible aussi avec SourceTree comme évoqué plus haut. Donc tu as le choix.
  • Bonjour


     


    Il faut m'expliquer longtemps, mais ça finit par rentrer !


     


    Tout est bon pour moi avec SourceTree, au niveau basic.


     


    Grand merci.

Connectez-vous ou Inscrivez-vous pour répondre.