Git - Liste tous les fichiers actuellement sous contrôle de source?

122

Existe-t-il un moyen de répertorier tous les fichiers actuellement sous contrôle de source dans git? (Pas seulement ceux qui ont été modifiés).

Anonyme
la source

Réponses:

129

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

git ls-tree -r master --nom uniquement

L' -roption le laissera recurse dans des sous-répertoires et imprimera chaque fichier actuellement sous contrôle de version. Vous pouvez également spécifier HEADau lieu de masterpour obtenir la liste de toute autre branche dans laquelle vous vous trouvez.

Si vous souhaitez obtenir une liste de tous les fichiers ayant déjà existé, voir ici :

git log --pretty = format: --name-only --diff-filter = A | trier -u
slhck
la source
1
Merci slhck, exactement ce que je cherchais - et utile de connaître le second aussi. Marquera comme correct dans 5 minutes et demie quand je suis autorisé. :-)
Anonyme
3
Merci d'avoir répondu. Je cherchais ça. Notez que git ls-tree -r master --name-onlycela ferait la même chose que la première option, sans avoir besoin du cut. Ah, et vous pouvez spécifier HEADau lieu de mastersi vous voulez juste cette liste pour la branche dans laquelle vous vous trouvez actuellement.
maurits
6
Lancer "git ls-files" vous épargnera quelques caractères :)
Zain R
Pourquoi a-t-on coupé la fin -? Certaines lignes supplémentaires montrant des fichiers dans une deuxième colonne sont répétés à partir de la première.
Adrian
@Adrian Aucune idée, copypasté à l'époque, corrigé maintenant.
Slhck
61

La git ls-filescommande fera ce dont vous avez besoin.

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

Mihai Capotă
la source
4
git ls-filesau lieu de git ls-tree -r master --name-onlyest certainement plus simple.
Karatéog
1
Désolé mais mon édition n'était pas invalide. Dans git actuel, il n'y a pas de git-ls-filesbinaire. Il y a le gitbinaire avec la ls-filescommande. Le lien vers la documentation est correct dans son contenu, mais techniquement pour un binaire obsolète.
JonnyJD
@JonnyJD, probablement marqué non valide car votre modification doit être un commentaire.
Ascherer
1
@JonnyJD Toutes les man-pages Git sont nommés comme git-commit, git-init, git-ls-files, etc. , même si les programmes sont sous - commandes en réalité. Il n'y a jamais eu de git-ls-filesbinaire, très probablement. Le raisonnement est qu'il est cohérent avec le mécanisme de sous-commande externe, ce qui vous permet d'enregistrer une git foocommande en écrivant un git-foobinaire.
Radon Rosborough le
4

git ls-files n’imprimera que les fichiers du répertoire de travail en cours.

Si, par exemple, vous avez un dépôt Git pour dotfiles ( core.worktree = /), vous aurez des fichiers hors de la racine git et cette simple commande 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 que les chemins soient spécifiés par rapport à votre répertoire (shell) actuel, ceci fait le travail:

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

et dans l'exemple ci-dessus, il imprimerait

README
../../../etc/ssh/sshd_config
AndiDog
la source
Dans git v2.21, git ls-filesmontre tout dans le répertoire actuel et ci-dessous. Cela ne montre tout simplement pas les fichiers supprimés dans le référentiel.
Adrian
0

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

JPaget
la source
1
Cela mentionne un outil, mais ne répond pas vraiment au "comment". Pouvez-vous développer cela dans une solution exploitable? Il est plus approprié de commenter une personne dans une direction de recherche pour qu'elle développe sa propre solution. Merci. à partir de l'avis
fixer1234
-2

Capture d'écran

S'il vous plaît jeter un oeil à l'image, sur le côté droit il y a deux options patch et arbre. Si vous sélectionnez une arborescence, vous pouvez afficher la structure des dossiers pour chaque commit.

Amarnath MB
la source
Veuillez envisager un meilleur engagement pour la capture d'écran afin que vous n'ayez pas à censurer autant.
Thorbjørn Ravn Andersen