'git log'가 특정 경로에 대한 변경 사항을 무시하도록 설정
어떻게 만들 수 ?git log
지정한 커밋 이외의 파일을 변경한 커밋만 표시하시겠습니까?
와 함께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 로그를 표시하는 방법.경로가 아닌 커밋 메시지를 제외하고는 동일한 질문입니다.
2008년부터 이 주제에 대한 포럼 토론: Re: 에서 파일 제외.이것은 유망해 보였지만 실이 말라버린 것 같습니다.
Nguyễn Thai Ngọc Duy()pclouds
의 문서에서 소개 경로 사양 마법과 커밋 ef79b1f 및 커밋 1649612의 짧은 형식으로 구현되었습니다(2014년 1.9/2.0, Q1).
이제 하위 폴더 내용을 제외한 모든 항목을 기록할 수 있습니다.
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'
케니 에비트가 언급했듯이,
실행 중인 경우에는 작은 따옴표를 사용하거나 큰따옴표로 적절하게 이스케이프하는 것을 잊지 마십시오.
git
순식간에bash
껍질, 예를 들어':!sub'
또는":\!sub"
그렇지 않으면 오류가 발생합니다.
참고: Git 2.13(2017년 2분기)에 동의어가 추가되었습니다.^
!
커밋 859b7f1, 커밋 42eb9(torvalds
2017년 2월 8일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 2017년 2월 27일 커밋 015fba3에서)
magic: '로지정 마법추: ' 가경▁'
^
!
''''
!
음의 경로 사양은 수정을 위해 우리가 하는 것과 일치하지 않을 뿐만 아니라 견적이 필요하기 때문에 셸 확장에 대한 끔찍한 문자입니다.그래서 '를 추가합니다.
^
제외 경로 지정 항목에 대한 대체 별칭으로 사용됩니다.
Git 2.28(2020년 3분기) 이전에는 작업 트리에서 추적되지 않은 경로를 포함하여 경로를 수집하는 동안 마이너스 경로 사양의 사용이 중단되었습니다.
Elija Newren()newren
의 commit f1f061e(2020년 6월 5일)를 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- 커밋 64efa11, 2020년 6월 18일)
dir
부정 경로 사양의 고정 처리신고자: 존 밀리킨
사인 오프 바이: 엘리야 뉴렌
do_match_pathspec()
로서 인생을 시작했습니다.match_pathspec_depth_1()
그리고 정확성을 위해서는 오직 에서만 전화가 걸려오기로 되어 있었습니다.match_pathspec_depth()
.match_pathspec_depth()
나중에 로 이름이 바뀌었습니다.match_pathspec()
그래서 오늘 우리가 기대하는 불변성은do_match_pathspec()
외부에 직접 전화를 거는 사람이 없습니다.match_pathspec()
.불행하게도, 이 의도는 두 함수의 이름을 바꾸고 추가적인 호출로 인해 사라졌습니다.
do_match_pathspec()
되었습니다.
- 75a6315f74("
ls-files
하위 모듈에 대한 경로 규격 일치 추가", 2016-10-07, Git v2.11.0-rc0 -- 배치 #11에 나열된 병합- 89a1f4aaf7("
dir
경로 사양이 dir 아래의 파일과 일치할 수 있는 경우 다시 해당 파일에 삽입하십시오.", 2019-09-17, Git v2.24.0-rc0).물이야론.
do_match_pathspec()
에 비해 중요한 이점이 있었습니다.match_pathspec()
--match_pathspec()
는 플래그를 두 값 중 하나로 하드 코딩하며, 이 새로운 호출자들은 플래그에 대한 다른 값을 전달해야 했습니다.또한, 비록 전화를 했지만,
do_match_pathspec()
직접적으로 부정확했고, 관찰 가능한 최종 출력에 차이가 없었을 가능성이 높습니다. 왜냐하면 버그는 단지 그것을 의미했기 때문입니다.fill_diretory()
불필요한 디렉토리로 다시 이동합니다.디렉터리 아래의 개별 경로에 대한 후속 do-this-path-match 검사는 이러한 추가 경로를 걸러내기 때문에 잘못된 기능을 사용하는 것과의 유일한 차이점은 불필요한 계산이었습니다.
두번째로 전화를 잘못 건 것은
do_match_pathspec()
직접 이동 또는 복사 + 복사를 통해 여러 개의 후기 리팩터에 포함되었습니다.커밋 참조
- 777b420347("
dir
treat_leading_path()
그리고.read_directory_recursive()
2019-12-19, Git v2.25.0-rc0 -- 병합)- 8d92fb2927("
dir
지수 알고리즘을 선형 알고리즘으로 대체", 2020-04-01, Git v2.27.0-rc0 -- 배치 #5에 나열된 병합- 95c11ecc73("오류 발생 가능성이 높은 수정")
fill_directory()
API; 일치 항목만 반환", 2020-04-01, Git v2.27.0-rc0 -- 배치 #5에 나열된 병합그 중 마지막으로 소개된 것은 다음과 같습니다.
do_match_pathspec()
개별 파일에서 반환되지 않아야 하는 개별 경로가 반환됩니다.대신 호출할 때의 문제는 다음과 같은 부정적인 패턴이 무시된다는 것입니다.
새가
match_pathspec_with_flags()
패턴을 합니다. 위에 큰 합니다.do_match_pathspec()
다른 사람들이 그것을 잘못 사용하는 것을 방지하고, 현재의 발신자들을 수정합니다.do_match_pathspec()
대신 둘 중 하나를 사용합니다.match_pathspec()
또는match_pathspec_with_flags()
.마지막으로 한 가지 주의할 점은
DO_MATCH_LEADING_PATHSPEC
는 특별한 가 필요합니다.DO_MATCH_EXCLUDE
.의
DO_MATCH_LEADING_PATHSPEC
만약 우리가 다음과 같은 경로 스펙을 가지고 있다면.*/Makefile
그리고 우리는 다음과 같은 디렉토리 경로를 확인하고 있습니다.
src/module/component
디렉터리에 이름이 지정된 파일이 있을 수 있기 때문에 디렉터리로 다시 들어가도록 일치하는 것으로 간주하고 싶습니다.
Makefile
아래 어딘가에그러나 제외 패턴을 사용할 때, 즉 다음과 같은 경로 사양이 있습니다.
:(exclude)*/Makefile
다음과 같은 디렉터리 경로를 사용할 수 있습니다.
src/module/component
(음의) 일치입니다.
이름이 지정된 파일이 있을 수 있습니다.
Makefile
디렉터리 아래 어딘가에 다른 파일이 있을 수 있으므로 해당 디렉터리 아래의 모든 파일을 사전에 제외할 수 없습니다. 개별 파일을 다시 검색한 다음 확인해야 합니다.을 합니다.
DO_MATCH_LEADING_PATHSPEC
양의 경로 사양에 대해서만 활성화되는 논리입니다.
tl;dr:shopt -s extglob && git log !(unwanted/glob|another/unwanted/glob)
Bash를 사용하는 경우 확장 글로빙 기능을 사용하여 필요한 파일만 가져올 수 있습니다.
$ 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
과 이과결할수있다니습합것▁this다▁with▁combine▁you를 조합할 수 있습니다.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
'programing' 카테고리의 다른 글
두 날짜의 시간이 아닌 날짜 부분만 비교하는 방법은 무엇입니까? (0) | 2023.07.03 |
---|---|
MongoDB: 치명적 오류: 'MongoClient' 클래스를 찾을 수 없습니다. (0) | 2023.07.03 |
numpy에서 배열에 단일 요소 추가 (0) | 2023.07.03 |
vba excel에서 여러 구분 기호로 문자열을 분할하는 방법은 무엇입니까? (0) | 2023.07.03 |
전 세계적으로 노출된 타사 모듈 확장 (0) | 2023.07.03 |