https://help.github.com/articles/set-up-git/ ===== Mettre en cache son login/mdp ===== On your computer, open the Git Shell application. Tell Git your name so your commits will be properly labeled. Type everything after the $ here: git config --global user.name "YOUR NAME" Tell Git the email address that will be associated with your Git commits. The email you specify should be the same one found in your email settings. To keep your email address hidden, see "Keeping your email address private". git config --global user.email "YOUR EMAIL ADDRESS" Next steps: Authenticating with GitHub from Git When you connect to a GitHub repository from Git, you'll need to authenticate with GitHub using either HTTPS or SSH. Connecting over HTTPS (recommended) : If you clone with HTTPS, you can cache your GitHub password in Git using a credential helper. If you're cloning GitHub repositories using HTTPS, you can use a credential helper to tell Git to remember your GitHub username and password every time it talks to GitHub. --> https://help.github.com/desktop/guides/getting-started/ : impossible,n'existe pas pour linux Connecting over SSH : If you clone with SSH, you must generate SSH keys on each computer you use to push or pull from GitHub. If you clone GitHub repositories using SSH, then you authenticate using SSH keys instead of a username and password. For help setting up an SSH connection, see Generating SSH Keys. git config --global credential.helper wincred --> ne marche pas En fait un truc semble marche je l'ai testé : Mettre ça dans /home/pi/.gitconfig [credential] helper = cache --> non, ne marche pas Ca par contre ca marche : git config credential.helper store Puis faire au moins un push avec la bonne authentification ===== Pour cloner depuis repo distant ===== sudo git clone https://github.com/newman79/rfirmanager.git ===== Pour construire un dépot et le créer sur le serveur distant ===== echo "# rfirmanager" >> README.md git init git add README.md git commit -m "first commit" git remote add origin https://github.com/newman79/rfirmanager.git git push -u origin master ===== Pour connaitre les evolutions de sa copie de travail par rapport a la derniere version commitee ===== git status git status -s ===== Pour mettre à jour sa copie de travail ===== git add git rm Remarque : Pour éviter l'étape git status, il y a peut etre moyen de faire ça : #git add -u git status -s | awk '{print $2}' | xargs git add git status -s | awk '{if ( $1=="??" ) { print "/home/pi/src/apache/rfirmanager/"$2} }' | xargs git add ===== Pour committer dans la branche de la base locale git ===== git commit -m "le commentaire pour ce commit" ===== Pour pousser vers la branche distante ===== git push origin master ===== Autre commandes (naza, rte) ===== git log --> affiche l'historique des commits de la branche courante git add algo-manager/.../AbstractUserConfiguration.java --> ajout de fichier dans l'indexation pour commit (stage) : le prochain commit comprendra les modifications sur ce fichier ou sa création ou suppression git add ./algo-ma.../ConfigFile.java --> ajout de fichier dans l'indexation pour commit (stage) : idem git rebase -i HEAD~2 --> permet de fusionner des commits : en l'occurrence, ici, ca affichera les 2 derniers commits ; pour fusionner l'avant dernier avec le dernier commit, on changera son flag en s, puis on sauvegardera suivi de git push --force --> le --force est nécessaire vu qu'on écrase l'historique sur le repo distant git commit -m "a comment" --> faire un commit suivi de git push git commit suivi de git push --set-upstream 299-ihm-parametrage --> création de la branche distante (origin/)299-ihm-parametrage et poussage de la branche courante vers la branche distante git branch --set-upstream-to=origin/master master relie la branche locale 'master' avec la branche distance origin/master (origin est en général le nom du dépot distant) ==== statut branche courante et working copy ==== git status ==== creation de branche et changement de branche ==== git checkout -b 310-alarms-ui-ameliorations --> création d'une branche à partir de la branche actuelle git checkout master --> changer de branche courante : se mettre sur master ==== reinitialiser une branche locale ==== git reset --hard origin/274-alarm-configurations-chechbox-laf --> remettre la branche courante comme si elle avait été tirée de origin/274-alarm-configurations-chechbox-laf git reset --hard origin/master --> remettre la branche courante comme si elle avait été tirée de origin/274-alarm-configurations-chechbox-laf ==== appliquer un commit ==== git cherry-pick 42ef9302 --> application d'un commit d'une branche sur la branche actuelle git cherry-pick --continue --> en cas de conflit d'application du cherry-pick, on résoud les conflits puis on exécute cette commande pour terminer le cherry-pick ==== Rebaser (https://git-scm.com/book/en/v2/Git-Branching-Rebasing) ==== git rebase master my-branch --> rebase my-branch sur master (i.e my-branch = master avec ses derniers commit, suivi de copie des commits qui avaient été fait sur my-branch, dans le même ordre) ou git rebase --onto master my-branch --> rebase my-branch sur master git rebase --onto master my-first-branch my-second-branch --> meme chose sur my-second-branch, sauf que my-second-branch est tirée de my-first-branch, qui est tirée de master. ==== Stash working copy (idea shelve equivalent) ==== git stash git stash list --> liste les modifications stashée git stash show --> git stash apply --> restore les modifications stashées Ce qu'on fait chez OB : quand on travaillait sur une branche dérivée de recette : un fois mergée, on devait appliquer les commits de notre PR sur la branche de dev. On le faisait par cherry pick, dans l'ordre chronologique. ===== Updater/Installer la derniere version de git ===== Au 12/03/2016, j'étais en version 1.7 Apparemment, pour une raison pas claire du tout, je ne pouvais plus créer de dépot sur github à partir de ma version de git. J'ai donc du updaté git cd /home/pi/src git clone https://github.com/git/git Ca créé la base locale en copiant la base d'origine, puis ca analayse les différence entre la base locale et le workspace (100% puisqu'aucun fichier n'a encore été créé dans l'espace de travail) puis du coup il sait qu'il faut créer tout ca dans l'espace de travail donc il le fait --> on a le .git et tous les répertoires dans l'espace de travail. Ensuite 3 actions doivent être faites : cd /home/pi/src/git make # compile make install # installe dans /usr/bin et peut dans /etc/ ... Par contre, il y a un pb, make merde : Your include paths indicate that you should be compiling against the system's OpenSSL installation. You shouldn't have the .h files in your package directory - it should be picking them up from /usr/include/openssl. The plain OpenSSL package (libssl) doesn't include the .h files - you need to install the development package as well (libssl-dev). ==> Il faut faire un sudo apt-get install libssl-dev # ca installe les .h et .cpp dans les répertoires connus de l'OS, pour que cette connasse de version d'install de git puisse compiler On recommence le make. La ca passe. Putain c'est très long !!!! et ça replante pour des raisons analogue de manque de fichiers de dev pour la compil !! super !!! sudo apt-get install libcurl4-gnutls-dev sudo apt-get install libexpat1-dev Et de nouveau, make, en croisant les doigts Et là c'est bon, il arrive à la fin ==> on fait le make install Mais ce con me met le bin git et ses autres binaires de merde dans /home/pi/bin/ ==> On remove l'ancien git 1.7 issu de la distrib debian : sudo apt-get remove git On édite le .bashrc de /home/pi puis on lui rajoute export PATH=${PATH}:/home/pi/bin/ En relancant un #bash, la commande git --version retourne 2.8rc ===== Client git graphique ===== sudo apt-get install gitg Pour le lancer : cd /un/dossier/.git (un repo local quoi) gksudo gitg # IDE C/C++ sudo apt-get install geany