題 Git - 列出當前受源代碼管理的所有文件?


有沒有辦法在git中列出當前受源代碼控制的所有文件? (不僅僅是那些經過修改的)。


93
2018-05-28 13:12


起源




答案:


如果要列出特定分支的所有文件,例如 master

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

-r 選項將使其遞歸到子目錄並打印當前受版本控制的每個文件。您也可以指定 HEAD 代替 master 獲取您可能在的任何其他分支的列表。

如果要獲取所有存在的文件的列表, 看這裡

git日誌 --pretty = format: -  name-status | cut -f2- |排序-u

99
2018-05-28 13:19



謝謝slhck,正是我所追求的 - 並且對了解第二個也很有用。當我被允許時,將在5分半鐘內標記為正確。 :-) - Anonymous
謝謝你的回答。我在尋找這個。注意 git ls-tree -r master --name-only 會像第一個選項一樣,不需要 cut。啊,你可以指定 HEAD 代替 master 如果你只是希望這個列表適合你目前所在的任何分支。 - maurits
運行“git ls-files”將為您節省幾個字符:) - Zain R


git ls-files 命令將做你需要的。

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


50
2017-11-27 09:36



git ls-files 代替 git ls-tree -r master --name-only 當然更簡單。 - karatedog
抱歉,我的編輯無效。目前的git沒有 git-ls-files 二進制文件。有 git 二進制與 ls-files 命令。文檔的鏈接在內容上是正確的,但在技術上對於過時的二進製文件。 - JonnyJD
@JonnyJD,可能標記為無效,因為您的編輯應該是評論。 - Ascherer
@JonnyJD所有Git手冊頁都被命名為 git-commit, git-init, git-ls-files等等,即使程序實際上是子命令。從來沒有過 git-ls-files 二進制,最有可能。原因是它與外部子命令機制一致,允許您註冊一個 git foo 通過寫一個命令 git-foo 二進制文件。 - Radon Rosborough


git ls-files 只會打印當前工作目錄中的文件。

例如,如果你有dotfiles的git repo(core.worktree = /),那麼你將擁有git root之外的文件,這個簡單的命令將不再起作用。

簡而言之,這將有效:

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

例:

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

如果要指定路徑 相對的 到你當前的(shell)目錄,這可以完成這項工作:

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

在上面的例子中,它將打印

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

3
2017-10-16 06:23





你也可以使用 gitk 交互存儲庫查看器


0
2018-03-12 19:16



這提到了一個工具,但並沒有真正回答“如何”。你能把它擴展成一個可行的解決方案嗎?只是指出一個人在研究方向上為他們開發自己的解決方案更合適作為評論。謝謝。 來自評論 - fixer1234