git - 我如何让 `git ls-files` 在子目录中工作?
问题描述
我想运行git ls-file --modified
以获取具有未暂存更改的文件列表。我惊讶地发现它可以在根目录中工作,但不能在任何子目录中工作,它只打印子目录中的文件(git status
例如,与之相反)。
重现步骤:
mkdir repo
cd repo
git init
touch file.txt
git add file.txt
mkdir subdirectory
echo "foo" >> file.txt # file now has unstaged changes
git ls-files --modified # This prints 'file.txt'
cd subdirectory/
git ls-files --modified # This prints nothing
我怎样才能在这里改变 git 的行为?
解决方案
默认情况下,许多 git 命令相对于您当前的工作目录(git status、ls-files、...)运行。
您可以使用-C
:
git -C ../ ls-files --modified
如果您希望命令相对于 git 'toplevel' 运行,您可以运行:
git -C $(git rev-parse --show-toplevel) ls-files --modified
来自 git 的手册页:
-C <path> Run as if git was started in <path> instead of the current working directory. When multiple -C options are given, each subsequent
编辑 它还取决于你想要什么样的输出,因为@phd 不是。请参阅下面的命令和输出以了解不同的选项及其输出:
> git -C ../ ls-files --modified
file.txt
> git -C $(git rev-parse --show-toplevel) ls-files --modified # wrt git toplevel no matter how deep you are in the tree
file.txt
> git ls-files --modified ../
../file.txt
> git ls-files --modified $(git rev-parse --show-cdup) # wrt git toplevel no matter how deep you are in the tree
../file.txt
推荐阅读
- json - AJAX - 将异步请求渲染到 DOM
- bash - 找到 crontab 文件并重命名
- java - 我想通过 REST API 调用将电子邮件详细信息保存在数据库中
- junit5 - 如何使用 TestInstanceFactory 管理实例的生命周期?
- rider - 在 Rider 中打开 Visual Studio 2017 .Net Core 2.1 Api
- ios - 如何在表格中显示自定义页脚视图?
- javascript - 单击时强制保持焦点在锚点上
- java - javax.enterprise.context.ApplicationScoped 和 javax.inject.Named 有什么区别?
- jquery - ASP.NET MVC JQuery 验证未通过提交输入触发。单击
- ios - 尝试打印整个数组,但只有最后一个正在打印到 textview