Archives pour la catégorie ‘Outils’

Git : annuler le dernier commit « amend »

# git reset --soft HEAD@{1}

Git : appliquer une stratégie de merge différente

# git checkout master
# git merge --no-ff release -X theirs

Git : prompt bash

Un prompt bash spécialisé pour l’utilisation de Git :

https://github.com/magicmonty/bash-git-prompt

Git : ajouter un second serveur origin pour les push

Une astuce utile si vous travaillez avec un serveur git privé et que vous souhaitez aussi publier votre code sur un serveur public (et inversement) :

# git remote set-url --add --push origin git@gitlab.my.domain:mygroup/project.git

GitLab-CI : nettoyer l’historique des builds

$ RAILS_ENV=production bundle exec rails console
Loading production environment (Rails 4.0.10)
> Build.delete_all

Git : intégration d’un dépôt externe par subtree

Intégrer un dépôt externe par subtree

# git remote add extern git@git.my.domain:group/extern.git
# git subtree add --prefix subdir/ --squash extern develop
# cd subdir
# ls

Modifier le dépôt local

# cd subdir/
# touch file
# git add file
# git commit -s -m "add file to project" file
# git push origin develop

Aucune modification n’est appliquée au dépôt externe ; les fichiers sont ajoutés uniquement au dépôt courant.

Comparer les différences avec le dépôt externe

# git diff extern/develop develop:subdir/

Mettre à jour le dépôt externe

# git subtree push --prefix subdir/ extern develop

Les modifications locales sont répercutées au dépôt externe, sachant que seuls les fichiers présents dans subdir/ sont pris en compte lors de la comparaison.

Récupérer les dernières modifications du dépôt externe

# git subtree pull --prefix subdir/ extern develop

GitLab-CI : effectuer une tâche pour une branche spécifique

echo "Starting runner on branch '$CI_BUILD_REF_NAME'"

bower install
npm install

grunt lint
grunt test

[[ "$CI_BUILD_REF_NAME" = "master" ]] && grunt build

exit 0

Git : renommer une branche distante

$ git push <remote> <remote>/<old_name>:refs/heads/<new_name> :<old_name>

Git : réécrire le nom et l’email d’un auteur dans l’historique des commits

$ git filter-branch --env-filter '
   oldname="(old name)"
   oldemail="(old email)"
   newname="(new name)"
   newemail="(new email)"
   [ "$GIT_AUTHOR_EMAIL" = "$oldemail" ] && GIT_AUTHOR_EMAIL="$newemail"
   [ "$GIT_COMMITTER_EMAIL" = "$oldemail" ] && GIT_COMMITTER_EMAIL="$newemail"
   [ "$GIT_AUTHOR_NAME" = "$oldname" ] && GIT_AUTHOR_NAME="$newname"
   [ "$GIT_COMMITTER_NAME" = "$oldname" ] && GIT_COMMITTER_NAME="$newname"
   ' HEAD

Méthode un peu plus radicale :

$ git filter-branch -f --msg-filter "sed 's/(old email)/(new email)/'" 61c854b660f86fd25d5c86e29d733861858af2cf..HEAD

Git : fichier de configuration basique

$ vim ~/.gitconfig
[user]
	name = <USERNAME>
	email = <EMAIL>

[color]
        branch = auto
        diff = auto
        status = auto

[alias]
	s = status --short
	d = diff
	dw = diff --word-diff
	l = log -1
	l1 = log --graph --abbrev-commit --decorate --date=relative --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)' --all
	l2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)' --all

[push]
	default = simple

[pull]
	rebase = true

[core]
	excludesfile = ~/.gitignore
Haut de page