특정 경로에 대한 변경 사항을 무시하는 '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 ef79b1f 및 commit 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"
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
'IT' 카테고리의 다른 글
c # .net의 디렉토리에있는 모든 파일을 반복하는 방법은 무엇입니까? (0) | 2020.08.10 |
---|---|
C에서 Linux와 공유 메모리를 사용하는 방법 (0) | 2020.08.10 |
함수에서 '벡터'를 반환해도되는 이유는 무엇입니까? (0) | 2020.08.10 |
Python에서 만든 MD5 해시가 쉘에서 echo 및 md5sum을 사용하여 만든 것과 다른 이유는 무엇입니까? (0) | 2020.08.10 |
MFC와 ATL의 근본적인 차이점은 무엇입니까? (0) | 2020.08.10 |