나는 주위를 둘러 보았고 이것이 가능한지 확실하지 않지만 여기에 있습니다.
다음과 같이 고유 식별자가 변수에 할당 된 (javascript) 파일 (예 : /lib/client.js)이 있습니다.
var identifier = "SOME_IDENTIFIER";
식별자를 버전 번호처럼 생각할 수 있습니다. 주기적으로이 변수를 새 식별자로 변경합니다.
제가하고 싶은 것은 우리가 지금까지 사용한 모든 고유 식별자를 찾는 것입니다. git으로 어떻게 할 수 있습니까?
git 히스토리를 검색하고 일치하는 줄을 인쇄하는 방법이 있다고 생각합니다 "var identifier ="
. 이 목록의 중복을 수동으로 제거 할 수 있습니다.
어쨌든, 여기에 대한 통찰력을 고맙게 생각합니다. 감사.
답변
git 1.8.4 이후로 질문에 답하는 더 직접적인 방법이 있습니다.
그 라인을 가정하면 110
선은 말하고 var identifier = "SOME_IDENTIFIER";
다음이 작업을 수행 :
git log -L110,110:/lib/client.js
이것은 해당 코드 줄에 닿은 모든 커밋을 반환합니다.
[ Git 문서 ( “-L”명령 줄 매개 변수 참조)]
답변
git-log
및에 대한 매뉴얼 페이지를 참조하십시오 gitdiffcore
. 이 명령이 그렇게 할 것이라고 생각하지만 옳지 않을 수도 있습니다.
git log -G "var identifier =" file.js
편집 : 실제 줄을 표시하는 bash 스크립트에 대한 대략적인 시작이 있습니다. 이것은 당신이 찾고있는 것보다 더 많을 수 있습니다.
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
하여 커밋 해시로 시작하는 정규식을 포함하는 해당 커밋 및 파일의 줄을 표시하도록 요청 합니다.
수정 : 댓글에서 제안 하는 -G
대신 사용하도록 변경되었습니다 -S
.
답변
gitk로도이 작업을 수행 할 수 있습니다.
gitk file.js
“커밋”드롭 다운에서 “문자열 추가 / 제거 :”를 선택하고 그 옆의 텍스트 상자에 “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 헤더를 억제하는 방법이있을 수 있지만 모르겠습니다.