로 git diff
시작하는 변경 사항을 어떻게 무시할 수 있나요 #
? 일반적인 diff
명령의 경우 다음과 같은 것을 사용합니다.
diff <(grep -v '^#' file1) <(grep -v '^#' file2)
그러나 아래 제안된 솔루션 중 어느 것도 작동하지 않습니다!
git diff
댓글을 생략하면 정말 읽기가 불가능한 걸까요?
고쳐 쓰다:
내 안에는 .gitconfig
:
[pager]
cdiff = diff-highlight
[alias]
cdiff = "diff -w --ignore-blank-lines -I'^#'"
이 작업을 수행하면 git cdiff
다음 오류가 발생합니다.
error: invalid option: -I^#
업데이트 2:
정말 실망스럽습니다. 이 구문은 git diff -G'^[^#]'
안정적으로 작동하지 않습니다. 예:
$ cat 1.txt
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
새 Git 저장소를 초기화합니다.
$ git init && git add . && git commit -m "initial commit" -a
파일 상단에 설명을 추가하면 됩니다.
$ cat 1.txt
# comment
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
지금까지는 예상대로 작동합니다. git diff -G'^[^#]'
댓글을 변경사항으로 표시하지 마세요. 그러나 마지막 줄에 실제 변경 사항을 추가한 다음 git diff -G'^[^#]'
다시 실행하면 추가된 마지막 줄이 표시되지만(해야 하는 대로) 이전에 표시되지 않았던 첫 번째 주석 줄도 표시됩니다.
따라서 기본적으로 주석이 아닌 변경 사항을 추가할 때마다 git은 주석까지 모든 것을 표시합니다.
답변1
이는 ing 전에 모든 파일을 필터링 하여 diff
달성할 수 있습니다 .
먼저 작은 도우미를 작성하고 호출합니다 stripcomments
(실행 파일, 어딘가에 있음 PATH
).
#!/bin/sh -
exec grep -ve '^#' -- "$@"
git diff
그런 다음 이 도우미를 사용하여 모드를 구성합니다.
git config diff.nocomments.textconv stripcomments
(현재 저장소가 구성됩니다).
마지막으로 모든 파일에서 이 도우미를 사용하도록 git 속성을 설정합니다.
echo '* diff=nocomments' >> .gitattributes
(저장소의 최상위 디렉토리에 있음)
git diff
이제 로 시작하는 모든 줄은 무시됩니다 #
. 이는 행 번호 매기기에 영향을 미칩니다.
모든 용도를 재정의하는 대신 이를 별칭으로 사용하려면 위 명령을 git diff
건너뛰고 git config
다음과 같이 별칭을 만듭니다.
git config alias.cdiff '-c diff.nocomments.textconv=stripcomments diff'
이제 주석이 제거된 상태로 실행됩니다 git cdiff
.git diff
#
git config --global
저장소별로 대신 ( )에 속성을 사용하고 저장하여 이러한 모든 항목을 전역적으로 구성할 수 있습니다 .$XDG_CONFIG_HOME/git/attributes
~/.config/git/attributes
.gitattributes
바라보다man gitattributes
그리고man git-config
더 알아보기.
답변2
어쩌면 당신은 하나 만들고 싶을 수도 있습니다git diff 및 정규식cdiff
그리고 git 구성에 이 명령에 대한 별칭을 추가하세요.
git diff -w -G'^[^#]'
~/.gitconfig
그런 다음 명령에 별칭을 추가하십시오.
[alias]
cdiff = "diff -w -G'^[^#]'"
이것이 의도한 목적에 맞는지 확실하지 않으므로 필요에 따라 조정하십시오.
답변3
예를 들어 보면 다음과 같습니다.
mkdir cdiff && cd cdiff
git init
cat text.txt
# first comment
1
2
# midle comment
3
4
# last comment
git add test.txt
git commit -m 'first'
이제 작업 디렉터리에서 이를 변경해 보겠습니다.
cat test.txt
1
2
# first comment
# last comment
4
bye
유틸리티를 생성합니다:
cat /usr/local/bin/git-cdiff
#!/bin/sh
diff --color -u <(grep -Ev '^(#|$)' $1) <(git show $2:$1 | grep -Ev '^(#|$)')
chmod 555 /usr/local/bin/git-cdiff
특정 커밋의 동일한 파일을 작업 디렉터리의 파일과 비교합니다.
git cdiff test.txt HEAD
또는:
git cdiff test.txt <hash commit>
git cdiff test.txt a4ec1
--- /dev/fd/63 2021-07-09 08:09:48.581153921 +0300
+++ /dev/fd/62 2021-07-09 08:09:48.581153921 +0300
@@ -1,4 +1,4 @@
1
2
+3
4
-bye