문제

내가 사용하려면 다음과 같은 명령을 만드는 파일을 배포:

tar cjvf ~/deploy.tar.bz2 `git diff --name-only 0abc 1def`

안 git diff 명령을 생산하는 파일의 목록을 상대적으로 포함하여 상대적인 경로를 실행합니다.

나는 실행하는 두 가지 문제지만,필요할 수 있을 탈출 자동 공간에서 출력,그래서 타르지 않고 불평에 대한 파일을 포함하는 공간 을 때 타르가 만든 모든 파일이 중복되는'숨겨진 파일'앞에'.'하는 표시 되지 않으로 ls-al.이들은 OSX 특정 메타파일에 의해 언급했듯이 kch.

어쨌든,사람을 알고의 솔루션은 이러한 문제,또는 그냥 일반 쉬운 방법은 스크립트를 이?

도움이 되었습니까?

해결책

에 정착했는 다음과 같은 솔루션과 함께 sed.

tar cjf ~/deploy.tar.bz2 \
`git diff --name-only 0abc 1def|sed -e "s/ /\\\ /g"`

다른 팁

이 숨겨진 dot-파일,그들은 도 밑줄-파?

면 파일 foo 당신은 다른 ._foo, 고,당신은 Mac,dot-밑줄로 파일은 파일을 리소스를 포크/메타데이터가 유지됩니다.

로 git 을 출력을 시도할 수 있는 배관을 통해 그것을 sedperl 을 위해 인용.믿 xargs 도울 수 있습니다.

왜 사용하지 않는 --files-from=FILE-T FILE 옵션 tar 파일이 될 수 있습'-'를 의미 표준 입력?

 git diff --name-only 0abc 1def | tar -T - cjf ~/deploy.tar.bz2

당신은 문제가 안된 공백 또는 탭 파일 이름에서,또는 단일 지수,또는 backquotes,또는 백슬래쉬(난 솔루션의 것에 문제가 있으로 하나의 견적을"'"파일 이름에서).수도 있습 문제가 있으로 줄 바꿈에서 파일 이름에서처럼 IFS 솔루션입니다.

면 크기에 상관 없 사용할 수 있습니 git 아카이브.

나는 확실하지 않다면 그것을 만들 수 tarball 만 포함하는 사이의 차이점을 두가한다.

시도할 수 있습니다

eval tar cjvf ~/deploy.tar.bz2 `git diff --name-only 0abc 1def | while read x; do echo "'""$x""'"; done`

거나 시도 같은 일 sed 를 사용하여,또는

IFS='
' tar cjvf ~/deploy.tar.bz2 `git diff --name-only 0abc 1def`

참고만 있는 단 하나 줄 바꿈에서 IFS.

그러나,경우에는 이름의 파일을 포함 줄바꿈,당신은 운명입니다.

여기에 또 다른,더 우아하는 솔루션 작품을 주위 탈출한 공간에서 파일 이름

git diff --name-only 0abc 1def | \
    tr '\n' '\0' | \
    xargs -0 tar -rjvf ~/deploy.tar.bz2

로 jpalecek 지적,하나는 것을 원하지 않을 실행하는"타르-c..."여러 번,그것의 더 나은 사용하기-r.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top