IT

특정 경로에 대한 변경 사항을 무시하는 'git log'만들기

lottoking 2020. 8. 10. 07:28
반응형

특정 경로에 대한 변경 사항을 무시하는 'git log'만들기


git log파일이 아닌 지정한 다른 파일을 변경 한 커밋 만-display하려면 어떻게 해야 우리합니까?

을 사용하면 git log주어진 경로 집합에 닿는 커밋을 필터링 할 수 있습니다. 내가 원하는 것은 지정된 경로 이외의 터치 경로 만 후보 해당 필터를 반전하는 것입니다.

나는 내가 원하는 것을 얻을 수있다

git log --format="%n/%n%H" --name-only | ~/filter-log.pl | git log --stdin --no-walk

어디에 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";
    }
}

나는 그것보다 좀 더 우아한 것을 원한다.

나는 오전 참고 없는 파일을 무시 GIT 만드는 방법을 물어. 다만 파일 추적하고 커밋 해야 합니다. 대부분의 경우 나는 무시 보는 데 관심이 없습니다.

관련 질문 : `git log --grep = <pattern>`반전 방법 또는 패턴과 일치하지 않는 git 로그를 표시하는 방법 경로가 아닌 커밋 메시지를 제외하고는 질문입니다.

2008 년 부터이 주제 에 대한 포럼 토론 : Re : git-diff에서 파일 제외 는 유망 해 보였지만 단일가 말라 버린 것입니다.


현재 (git 1.9 / 2.0, Q1 2014) 도입 된 pathspec 매직 :(exclude)과 짧은 형식:!commit ef79b1fcommit 1649612 , Nguyễn Thái Ngọc Duy ( pclouds)에 의해 구현 여기 에서 문서를 사용할 수 있습니다 .

이제 하위 폴더 콘텐츠를 모든 항목을 기록 할 수 있습니다.

git log -- . ":(exclude)sub"
git log -- . ":!sub"

또는 해당 하위 폴더의 특정 요소를 제외 할 수 있습니다.

  • 특정 파일 :

    git log -- . ":(exclude)sub/sub/file"
    git log -- . ":!sub/sub/file"
    
  • 에서 주어진 파일 sub:

    git log -- . ":(exclude)sub/*file"
    git log -- . ":!sub/*file"
    git log -- . ":(exclude,glob)sub/*/file"
    

제외 대소 문자를 구분하지 않습니다.

git log -- . ":(exclude,icase)SUB"

케니 Evitt 지적

Bash 셸에서 Git을 실행하는 경우 ':!sub'또는 ":\!sub"대신 오류 를 피하십시오.bash: ... event not found


참고 : Git 2.13 (2017 년 2 분기)은 다음에 동의어 ^추가합니다.!

Linus Torvalds ( )의 commit 859b7f1 , commit 42ebeb9 (2017 년 2 월 8 일)를 참조하십시오 . (의해 병합 Junio C 하마노 -015fba3 커밋 2,017 27 이월)torvalds
gitster

pathspec 매직 : ' ^'의 이름으로 ' !'추가

!부정적인 경로 스펙에 대한 ' ' 의 선택은 우리가 개정하는 것과 일치 여부하지 않을뿐만 아니라 인용이 필요하기 때문에 쉘 확장을위한 끔찍한 문자이기도합니다.

따라서 ^제외 경로 지정 항목에 대한 대체 전원으로 ' '를 추가 합니다.


tl; 박사 :shopt -s extglob && git log !(unwanted/glob|another/unwanted/glob)

당신이 사용하는 경우 배쉬를 사용할 수있는 확장 로빙 필요한 파일 만 기능 :

$ cd -- "$(mktemp --directory)" 
$ git init
Initialized empty Git repository in /tmp/tmp.cJm8k38G9y/.git/
$ mkdir aye bee
$ echo foo > aye/foo
$ git add aye/foo
$ git commit -m "First commit"
[master (root-commit) 46a028c] First commit
 0 files changed
 create mode 100644 aye/foo
$ echo foo > bee/foo
$ git add bee/foo
$ git commit -m "Second commit"
[master 30b3af2] Second commit
 1 file changed, 1 insertion(+)
 create mode 100644 bee/foo
$ shopt -s extglob
$ git log !(bee)
commit ec660acdb38ee288a9e771a2685fe3389bed01dd
Author: My Name <jdoe@example.org>
Date:   Wed Jun 5 10:58:45 2013 +0200

    First commit

globstar재귀 작업 위해 결합 할 수 있습니다 .


다음 을 사용하여 파일의 변경 사항을 일시적으로 무시할 수 있습니다 .

git update-index --skip-worktree path/to/file

해당의 모든 변경 사항이 무시됩니다, 앞으로 git status, git commit -a당신이 그 파일을 커밋 할 파일 준비가 널, 그냥 역 등 :

git update-index --no-skip-worktree path/to/file

바로 커밋하십시오.

참고 URL : https://stackoverflow.com/questions/5685007/making-git-log-ignore-changes-for-certain-paths

반응형