Question Git - Répertorie tous les fichiers actuellement sous contrôle de source?


Est-il possible de lister tous les fichiers actuellement sous contrôle de code source dans git? (Pas seulement ceux qui ont été modifiés).


91
2018-05-28 13:12


origine




Réponses:


Si vous souhaitez répertorier tous les fichiers pour une branche spécifique, par exemple master:

git ls-tree -r master --name-only

le -r L'option laisse le récursif dans les sous-répertoires et imprime chaque fichier actuellement sous contrôle de version. Vous pouvez également spécifier HEAD au lieu de master pour obtenir la liste de toutes les autres succursales que vous pourriez être.

Si vous souhaitez obtenir une liste de tous les fichiers ayant existé, vois ici:

journal de git --pretty = format: --name-status | couper -f2- | trier -u

96
2018-05-28 13:19



Merci slhck, exactement ce que j'étais après - et utile de connaître le second aussi. Marquer comme correct dans 5 minutes et demie quand je suis autorisé. :-) - Anonymous
Merci d'avoir répondu. Je cherchais ça. Notez que git ls-tree -r master --name-only ferait la même chose que la première option, sans avoir besoin de la cut. Ah, et vous pouvez spécifier HEAD au lieu de master si vous voulez juste cette liste pour n'importe quelle branche sur laquelle vous êtes actuellement. - maurits
Lancer "git ls-files" vous permettra d'économiser quelques caractères :) - Zain R


le git ls-files commande fera ce dont vous avez besoin.

La source: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


50
2017-11-27 09:36



git ls-files au lieu de git ls-tree -r master --name-only est certainement plus simple. - karatedog
Désolé mais ma modification n'a pas été invalidée. Dans git actuel il n'y a pas git-ls-files binaire. Il y a le git binaire avec le ls-files commander. Le lien vers la documentation est correct dans le contenu, mais techniquement pour un binaire obsolète. - JonnyJD
@JonnyJD, probablement marqué invalide car votre modification devrait être un commentaire. - Ascherer
@JonnyJD Toutes les pages de manuel de Git sont nommées comme git-commit, git-init, git-ls-files, etc. même si les programmes sont en réalité des sous-commandes. Il n'y a jamais eu de git-ls-files binaire, le plus probable. Le raisonnement est qu’il est cohérent avec le mécanisme de la sous-commande externe, qui vous permet d’enregistrer un git foo commande en écrivant un git-foo binaire. - Radon Rosborough


git ls-files n'imprimera que des fichiers dans le répertoire de travail en cours.

Si, par exemple, vous avez un référentiel git pour les fichiers dotfiles (core.worktree = /), alors vous aurez des fichiers en dehors de la racine git et cette commande simple ne fonctionnera plus.

En bref, cela fonctionnera:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

Exemple:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

Si vous voulez des chemins spécifiés relatif à votre répertoire (shell) actuel, cela fait le travail:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

et dans l'exemple ci-dessus, cela imprimerait

README
../../../etc/ssh/sshd_config

2
2017-10-16 06:23





Vous pouvez également utiliser le gitk visualiseur de référentiel interactif.


0
2018-03-12 19:16



Cela mentionne un outil, mais ne répond pas vraiment au "comment". Pouvez-vous développer cela en une solution exploitable? Le simple fait de pointer quelqu'un dans une direction de recherche pour lui permettre de développer sa propre solution est plus approprié en tant que commentaire. Merci. de la critique - fixer1234