2017-09-20 2 views
2

입니다. 나는 Bash 윈도우의 태그에 git diff를 사용하고 있으며, 대부분 내가 원하는 것을하고 있습니다. 나는이 출력을 얻을 수있는 방법git diff 출력 파일명은

4 6 dir1/dir2/dir3/dir4/thisIsMyFile.cs 

:

4 6 thisIsMyFile.cs 

나는/경로 (dir1/dir2/dir3/dir4/)을 할 필요가 없습니다를 그냥 파일 이름 (

$ git diff -- numstat TAG2 TAG1 

이 출력주기 thisIsMyFile.cs).

+0

은 TAG의 diff를 수행하기 때문에 경로에 다양한 디렉토리가있는 수많은 파일이 발견된다는 것을 잊어 버렸습니다. 모든 줄에서 나는 여전히 파일 이름만을 원한다. 이 얻을 : 4~6 thisIsMyFile1.cs 22 : 4-6 DIR1/DIR2/dir3/dir4/thisIsMyFile1.cs 22 12 DIR1/DIR2/thisIsMyFile2.cs 8 2 DIR1/thisIsMyFile3.cs 이 원하는 12 thisIsMyFile2.cs 8 2 thisIsMyFile3.cs – user8644501

답변

1

당신은 awk 사용할 수 있습니다

git diff --numstat | awk -F'[/\t]' '{print $1,$2,$NF}' 

가하고있는 awk 명령 무엇입니까?

-F'[/\t]'필드 구분 기호을 탭 또는 /로 설정합니다. (git의 출력은 탭으로 구분됩니다.) $NF은 줄의 마지막 필드입니다 - 파일 이름.


참고 : 파일 이름에 탭이 있으면 위의 명령이 실패합니다. 그 제한을 가지고 살 수 있다면 재미있게 놀아 라!

2

아는 한, Git 홀로이 작업을 수행 할 수있는 방법이 없습니다 (즉, Git diff에 올바른 인수를 지정하는 것). Git 출력을 후 처리하려면 Bash 파이프 라인을 사용해야한다. 내가 제안 : 원래 서식을 유지하고있는 탭 또는 공백이있는 파일이있는 경우에도 올바르게 구문 분석하도록 설계되어 있기 때문에

git diff --numstat TAG2 TAG1 | while IFS= read -r line; do 
    printf '%s\t' "$(cut -f-2 <<<"$line")" 
    basename "$(cut -f2- <<<"$line")" 
done 

이 좀 더 복잡하다. 파일 이름에 공백이 없다거나 Bash보다 강력한 스크립팅 언어를 사용하여 선을 파싱하는 데 관심이 있다면 간단해질 수 있습니다.

0

사용의 기본 이름의 -a의 $ (TAG1의 TAG2 --numstat 자식의 차이)

참고 내가 하위 명령을 실행 bash는 구문을 사용하고 있습니다.