给定一个带有两个文件的单个提交的简单测试存储库,a并且b,我可以获得特定文件的列表:
$ git ls-files a
a
Run Code Online (Sandbox Code Playgroud)
或者除特定文件之外的所有文件的列表:
$ git ls-files . ':!b'
a
Run Code Online (Sandbox Code Playgroud)
我可以创建特定文件的存档:
$ git archive HEAD a | tar tf -
a
Run Code Online (Sandbox Code Playgroud)
但我无法创建除特定文件之外的所有文件的存档:
$ git archive HEAD . ':!b' | tar tf -
a
b
Run Code Online (Sandbox Code Playgroud)
在我的真实存储库中,使用特定文件存档的选项不是我的选项,因为它超出了最大命令行参数长度.
我知道我可以.gitattributes通过export-ignore属性存储要排除的文件列表,但列表是动态生成的.我可以自动更改文件,但更改不会在另一次提交之后被提取.
是否有其他调用无需另外提交即可运行?
如何从 中排除文件和目录git diff --no-index?
例如,我想显示两个目录project1&之间的差异,project2同时忽略它们的顶级.git目录 ( project1/.git& project2/.git) 及其所有.DS_Store文件。
我需要列出触及源树中的一个路径而不是另一个路径的提交。
D-头
C - 触摸foo和bar
B - 触碰foo
A - 基线
在 A 和 DI 之间想要一个所有涉及文件夹foo 的 提交列表,除非他们也接触文件夹bar,换句话说,在上面的例子中,我希望看到 B 而不是 C。
我试过了,git rev-list A..D --exclude='bar' -- foo但这仍然给了我 B 和 C。
请指教。
我正在尝试总结我在项目上的工作.问题是我不想在输出中包含测试文件git log --patch.
这些文件位于一个名为的目录中mtest; 但是,该文件夹还包含我想要显示的测试套件代码.测试文件,我想排除,有扩展mscx或xml,所以我想基于该过滤器的工作.
我已经看过使'git log'忽略某些路径的更改,但这看起来像是排除了修改文件而不是简单地排除文件的提交.
有没有办法做到这一点?
我已经尝试了Jubobs的答案,它看起来很有效,但令人惊讶的是,即使有过滤器,也会出现2个文件.
我用这个小存储库复制了这个:
mkdir test
cd test
git init
echo 'readme' > README
git add .
git commit -m "Initial commit"
mkdir test2
cd test2
echo 't1' > test1.cpp
echo 't2' > test2.xml
git add .
git commit -m "c2"
echo 't3' > test3.cpp
echo 't4' > test4.xml
git add .
git commit -m "c3"
Run Code Online (Sandbox Code Playgroud)
我注意到创建目录时不会过滤文件.我尝试了以下命令:
git log --patch -- . ":(exclude)**/*.xml"
Run Code Online (Sandbox Code Playgroud)
这导致包含 …