을 사용하여 문제를 git diff 을 만드 파일의 목록을 위해 배포
-
03-07-2019 - |
문제
내가 사용하려면 다음과 같은 명령을 만드는 파일을 배포:
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 을 출력을 시도할 수 있는 배관을 통해 그것을 sed
나 perl
을 위해 인용.믿 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.