Question Statut git programmatique


Est-ce que quelqu'un connaît une plomberie git (certainement pas de la porcelaine) pour déterminer si:

  • il y a des modifications dans le repo depuis le dernier commit, et
  • si HEAD locale est en avance sur l'origine / HEAD

Je cherche à déterminer cela par programmation, d’où le désir de ne pas le résoudre avec de la porcelaine et divers sed-fu.


11
2018-03-01 06:00


origine


Réponses:


Mise à jour: as mentionné ci-dessous par toupeira, vous pouvez utiliser le --porcelain option de statut git (depuis la validation 6f15787, septembre 2009, version 1.7.0).

J'ai mentionné dans ma réponse "Que signifie le terme porcelaine dans Git?" cette:

Peut-être le sens de --porcelain voici la "production de sortie adaptée à la consommation par des manuscrits en porcelaine"

Cependant, cela ne montrera pas l'information en avance / en arrière: voir "Que ajouter à «git status --porcelain» pour le faire se comporter comme «git status»?": pour cela, vous auriez encore besoin d'utiliser d'autres commandes: voir"Comment savoir si le dépôt git a des modifications qui n'ont pas été synchronisées avec le serveur?"


Réponse initiale mars 2009

En porcelaine commandée, a:

$ git diff HEAD

vous donne les changements depuis le dernier commit (ce que vous commettez si vous lancez "git commit -a").

Un équivalent possible dans la commande de plomberie serait:

$ git ls-files -m

pour lister tous les fichiers modifiés (répertoire de travail ou index)


Si vous créez votre référentiel en clonant le référentiel de quelqu'un d'autre, la branche "maître" distante est copiée dans une branche locale nommée "origine". Vous obtenez votre propre branche "maître" qui n'est pas liée au référentiel distant.

Il y a toujours un chef actuel, connu sous le nom de HEAD. (C'est en fait un lien symbolique, .git / HEAD, vers un fichier comme refs / heads / master.)

exécuter "git status" et analyser le résultat:

# On branch master
# Your branch is ahead of 'origin/master' by 11 commits.
#

Plus de détails dans la question SO "Pourquoi Git me dit-il «Votre agence est en avance sur« origine / maître »par 11 commits» et comment l’arrêter?"

Équivalent possible dans la commande de plomberie:

* git-for-each-ref

pour lister tous les commits, mais il faut aussi analyser la sortie ...

Encore, git ls-files pourrait être utilisé pour produire le même résultat qu'un statut git.

git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude \
                    --others \
                    --modified \
                    -t

10
2018-03-01 09:51



git status a maintenant un --porcelain argument à des fins de script (ainsi qu'une alternative -z pour l'analyse de la machine), cela est préférable à git ls-files qui n'affiche pas les fichiers ajoutés à l'index.


2
2017-07-07 23:37