it-source

Gitdiff --이름만 사용하고 해당 목록을 복사합니다.

criticalcode 2023. 8. 19. 10:25
반응형

Gitdiff --이름만 사용하고 해당 목록을 복사합니다.

두 개의 개정판 사이에 변경된 파일 목록을 가져오려고 하는데, 이는 간단합니다.

git diff -–name-only commit1 commit2 > /path/to/my/file

그러나 나열된 모든 파일을 다른 곳에 복사하려면 무엇을 써야 합니까?그리고 복사된 파일에 대해 완전히 동일한 디렉토리 구조가 필요합니다.

예를 들어, 파일을 수정하고 추가했습니다.

/protected/texts/file1.txt
/protected/scripts/index.php
/public/pics/pic1.png

나는 참여하고 싶습니다./home/changes/변경 및 추가된 모든 파일:

/home/changes/protected/texts/file1.txt
/home/changes/protected/scripts/index.php
/home/changes/public/pics/pic1.png

내가 테스트한 다음 명령을 사용해 보십시오.

$ cp -pv --parents $(git diff --name-only) DESTINATION-DIRECTORY

다음 항목이 올바르게 작동합니다.

git diff -z --name-only commit1 commit2 | xargs -0 -IREPLACE rsync -aR REPLACE /home/changes/protected/

추가 설명:

  • -z에.git diff --name-only파일 이름에 비정상적인 문자가 있을 경우를 대비하여 새 줄 대신 NUL 바이트로 구분된 파일 목록을 출력합니다.

  • -0로.xargs는 표준 입력을 NUL로 구분된 매개 변수 목록으로 해석합니다.

  • -IREPLACE기본적으로 필요합니다.xargs변수를 끝에 추가할 것입니다.rsync지휘권대신, 그것은 그들을 나중에 어디에 두라고 말합니다.REPLACEis. (이 서버 오류 답변의 좋은 팁입니다.)

  • -a에 대한 매개 변수.rsync가능한 경우 권한, 소유권 등을 보존하는 수단.-R대상에 파일을 만들 때 전체 상대 경로를 사용합니다.

업데이트: 이전 버전의xargs당신은 그것을 사용해야 할 것입니다.-i대신 옵션-I(전자는 이후 버전에서는 더 이상 사용되지 않습니다.findutils.)

여기 한 줄기 글이 있습니다.

변경된 파일을 나열하고 *.zip:

git diff --name-only | zip patched.zip -@

마지막으로 커밋된 변경된 파일을 나열하고 *.zip:

git diff --name-only HEAD~ HEAD | zip patched.zip -@
zip update.zip $(git diff --name-only commit commit)
#!/bin/bash
# Target directory
TARGET=/target/directory/here

for i in $(git diff --name-only)
    do
        # First create the target directory, if it doesn't exist.
        mkdir -p "$TARGET/$(dirname $i)"
        # Then copy over the file.
        cp -rf "$i" "$TARGET/$i"
    done

https://stackoverflow.com/users/79061/sebastian-paaske-t%c3%b8rholm

완벽하게 작동합니다.

git diff 1526043 82a4f7d --name-only | xargs zip update.zip

git diff 1526043 82a4f7d --name-only | xargs -n 10 zip update.zip

아무도 언급하지 않았습니다.cpio입력하기 쉽고, 하드 링크를 만들고, 파일 이름의 공백을 처리합니다.

git diff --name-only $from..$to  | cpio -pld outdir

언급URL : https://stackoverflow.com/questions/5605347/git-diff-name-only-and-copy-that-list

반응형