Git show的文件路径

use*_*006 6 git

假设我在目录中有我的东西的git repo myapp:

myapp
    /.git
    /.gitignore
    /subdirA
        /subdirB
            /file1.txt
            /file2.txt
            /(and some other stuffs)
    /(and some other stuffs)
Run Code Online (Sandbox Code Playgroud)

我想file1.txt从旧提交中查看abcd123.对于另一个线程,我了解到我应该使用类似的东西:

$ git show abcd123:path/to/file1.txt
Run Code Online (Sandbox Code Playgroud)

但是,我对使用正确的路径感到困惑.我尝试过类似的东西

$ git show abcd123:myapp/subdirA/subdirB/file1.txt
$ git show abcd123:subdirA/subdirB/file1.txt
$ git show abcd123:subdirB/file1.txt
$ git show abcd123:file1.txt
Run Code Online (Sandbox Code Playgroud)

但是git不断给我一些错误信息

$ Path 'subdirA/subdirB/file1.txt' does not exist in 'abcd123'
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题呢?

小智 5

此命令将生成注释中存在的路径列表abcd123

git ls-tree -r --name-only abcd123
Run Code Online (Sandbox Code Playgroud)

您从该命令获得的任何内容都应作为 git show abcd123:...

此外,有时./在路径上使用前导会更容易。这会自动将 替换为.从存储库根目录到工作树中当前目录的路径。例如:

cd ~/my-git-repo/dir1/dir2
git show abcd123:./Makefile # equivalent to git show abcd123:dir1/dir2/Makefile
Run Code Online (Sandbox Code Playgroud)

如果你尝试git show abcd123:Makefile它不起作用......但git确实建议(“你是说......?”)具有存储库根目录完整路径的版本和带有./......的版本,除非你也有Makefileabcd123这种情况下的根目录中,您只会得到它,而不会发出您可能想要的警告./Makefile