有没有办法搜索git存储库,git grep但从搜索中排除某些路径/目录/文件?像--exclude普通grep命令中的选项一样.
如果你很好奇:我不想使用普通的grep,因为它比git grepgit存储库的大小要慢得多.
git log除了我指定的文件外,我怎么才能只显示改变文件的提交?
有了git log,我可以将我看到的提交过滤给那些触及给定路径的人.我想要的是反转该过滤器,以便只列出除指定的触摸路径以外的触摸路径.
我可以得到我想要的东西
git log --format="%n/%n%H" --name-only | ~/filter-log.pl | git log --stdin --no-walk
Run Code Online (Sandbox Code Playgroud)
在哪里filter-log.pl:
#!/usr/bin/perl
use strict;
use warnings;
$/ = "\n/\n";
<>;
while (<>) {
my ($commit, @files) = split /\n/, $_;
if (grep { $_ && $_ !~ m[^(/$|.etckeeper$|lvm/(archive|backup)/)] } @files) {
print "$commit\n";
}
}
Run Code Online (Sandbox Code Playgroud)
除了我想要比这更优雅的东西.
请注意,我不是在问如何让git忽略这些文件.应跟踪和提交这些文件.就是这样,大多数时候,我对看到它们并不感兴趣.
相关问题:如何反转`git log --grep = <pattern>`或如何显示与模式不匹配的git日志除了提交消息而不是路径之外,它是同一个问题.
关于这个主题的论坛讨论从2008年开始:Re:从git-diff中排除文件这看起来很有希望,但线程似乎已经枯竭了.
我用git跟踪一个项目.工作副本中有一些Xcode项目文件,我想继续跟踪,但不想在差异中看到,因为总有几十条我不感兴趣的更改行.是否有一种简单的方法可以git-diff跳过这些文件?我试图设置一个自定义的"静音"差异工具:
$ cat .gitattributes
Project.xcodeproj/* diff=nodiff
$ cat ~/.gitconfig
[diff "nodiff"]
command = /bin/true
但:
$ git diff external diff died, stopping at Project.xcodeproj/zoul.mode1v3.
我究竟做错了什么?
我的〜/ .gitconfig是:
[alias]
commit = "!sh commit.sh"
Run Code Online (Sandbox Code Playgroud)
但是,当我输入git commit时,不会调用脚本.
是否可能,或者我必须使用另一个别名?
尝试调整来自旺旺的答案以从"git diff"中排除文件以获得--stat标志并失败 - 接受的答案(创建驱动程序)似乎只是unix(重定向到/ bin/true,无论这意味着什么)加上它创建了一个驱动程序将它永久地分配给文件类型,而我正在寻找一个开关来临时禁用文件的差异(或者更确切地说是某些文件).
脚本解决方案:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
Run Code Online (Sandbox Code Playgroud)
实际上调用git状态并编辑其输出 - 而我想要的是指示git diff本身在计算(简单)--stat(只是更改行)时忽略一些文件.我经历了git-diff文档,但似乎无法找到这样的选项.有人帮我一把吗?
$ git --version
git version 2.6.1.windows.1
Run Code Online (Sandbox Code Playgroud) 如何从 中排除文件和目录git diff --no-index?
例如,我想显示两个目录project1&之间的差异,project2同时忽略它们的顶级.git目录 ( project1/.git& project2/.git) 及其所有.DS_Store文件。
这对某人来说应该很简单,我似乎无法获得正确的语法。情况是我已经检查了我的一个同事分支,我想看到这个分支和 dev 分支之间的区别,但是我不想看到一个特定文件中的变化(因为它是一个巨大的文件)。这是我尝试过的:
git diff origin/dev ':(exclude)package-lock.json'
git diff ':(exclude)package-lock.json' origin/dev
git diff -- . ':(exclude)package-lock.json' origin/dev
Run Code Online (Sandbox Code Playgroud)
我知道我很接近...
注意...有人告诉我这个问题可能是这个问题的重复:想要从“git diff”中排除文件, 但事实并非如此。该问题的公认答案是:
git diff -- . ':(exclude)db/irrelevant.php'
Run Code Online (Sandbox Code Playgroud)
但是,当我在系统上运行此命令时:
git diff -- . ':(exclude)package-lock.json'
Run Code Online (Sandbox Code Playgroud)
我什么也得不到。我一无所获的原因可能是因为在此命令中从未指定我想要当前分支和 origin/dev 之间的差异。我想要的是类似于上面的答案,但也表明当前分支和远程分支之间的区别。
是不是可以在git diff中忽略某些文件?我特别感兴趣的是过滤掉Makefile.in,Makefile,configure(以及所有自动生成的垃圾).