programing

Git: 전체 git 내역에 걸쳐 지정된 파일의 한 줄에 대한 다양한 변경 사항을 모두 표시합니다.

bestprogram 2023. 10. 4. 22:12

Git: 전체 git 내역에 걸쳐 지정된 파일의 한 줄에 대한 다양한 변경 사항을 모두 표시합니다.

주위를 둘러봤는데 이게 가능한지는 모르겠지만, 다음과 같습니다.

(javascript) 파일(say /lib/client.js)에는 다음과 같은 고유 식별자가 할당되어 있습니다.var identifier = "SOME_IDENTIFIER";

버전 번호와 같은 식별자를 생각할 수 있습니다.주기적으로 이 변수를 새 식별자로 변경합니다.

제가 하고 싶은 것은 우리가 사용했던 모든 고유 식별자를 찾는 것입니다.깃으로 어떻게 하면 되나요?

깃 히스토리를 검색하고 라인 매칭을 인쇄하는 방법이 있을 거라고 생각합니다."var identifier =". 이 목록을 수동으로 삭제할 수 있습니다.

어쨌든, 어떤 통찰력이라도 있으면 고맙겠습니다.감사해요.

Git 1.8.4 이후로 당신의 질문에 더 직접적으로 대답할 수 있는 방법이 있습니다.

그 선을 가정하면110대사는 다음과 같습니다.var identifier = "SOME_IDENTIFIER";, 다음 작업을 수행합니다.

git log -L110,110:/lib/client.js

코드 라인을 터치한 모든 커밋을 반환합니다.

명령줄 매개 변수는 설명서를 참조하십시오.

사용자 페이지 참조git-log그리고.gitdiffcore. 이 명령으로 할 수 있을 것이라 생각하지만, 정확하지 않을 수도 있습니다.

git log -G "var identifier =" file.js

편집: 배시 스크립트가 실제 대사를 보여주기 위한 대략적인 시작이 있습니다.이것이 당신이 찾고 있는 것일 수도 있습니다.

for c in $(git log -G "something" --format=%H -- file.js); do
    git --no-pager grep -e "something" $c -- file.js
done

사용합니다.git log -G재미있는 커밋을 찾아서, 사용하기--format=%H커밋 해시 목록을 작성합니다.그런 다음 각각의 흥미로운 약속을 반복하며 질문합니다.git grep해당 커밋 및 파일의 행을 커밋 해시로 접두사를 붙여 표시합니다.


EDIT: 용도 변경-G대신에-S의견서에 제시된 바와 같이

gitk을 사용하여 작업할 수도 있습니다.

gitk file.js

"commit" 드롭다운에서 "adding/removing 문자열:"을 선택하고 옆에 있는 텍스트 상자에 "var identifier ="을 입력하면 해당 문자열을 포함하는 줄을 추가하거나 제거하는 모든 커밋이 강조 표시됩니다.

@rob의 대답을 조금만 맞추면,git log기본적으로 시각적 비교만 하면 됩니다.

git log -U0 -S "var identifier =" path/to/file

-U0패치 모드에서 출력을 의미합니다(-p) 및 패치 주위에 0줄의 컨텍스트를 표시합니다.

분기 간에도 이 작업을 수행할 수 있습니다.

git log -U0 -S "var identifier =" branchname1 branchname2 -- path/to/file

diff header를 억제하는 방법이 있을 수 있지만, 저는 그것을 모릅니다.

Magit에서, 당신은 이것을 할 수 있습니다.

l, =L

그러면 파일과 시작, 끝 줄을 묻는 메시지가 나타납니다.

저는 리눅스 커널에 부여된 모든 애완동물 이름을 나열하고 싶었습니다.이것은 에 설정되어 있습니다.Makefile(비록 이것이 전체 역사는 아니지만) 커널 깃레포에서.특정 라인 번호에 의존하고 싶지 않았고 커밋 레퍼런스보다는 라인의 실제 콘텐츠를 원했고, 주문에 영향을 주지 않고 중복을 제거하고 싶었습니다.저는 이렇게 생각해냈습니다.

git log --format=format:%H Makefile | xargs -I{} git show {}:Makefile | awk -F '=' '/^NAME = /{print $NF}' | awk '!x[$0]++'

은 우선 를 사용합니다.git log을 주는 다로 합니다.git show, 그 ref through awk는 관심사를 추출하고 두번째 awk는 목록을 duplic 해제합니다.

누구에게나 유용할 경우를 대비해서 말입니다.

언급URL : https://stackoverflow.com/questions/9935379/git-show-all-of-the-various-changes-to-a-single-line-in-a-specified-file-over-t