programing

git-diff에서 패치 호환 출력을 받을 수 있습니까?

elecom 2023. 6. 27. 21:41
반응형

git-diff에서 패치 호환 출력을 받을 수 있습니까?

저는 아주 간단한 잘못을 하고 있습니다.몇 가지 변경 사항을 다시 적용할 수 있도록 일반 패치 파일을 준비하려고 합니다.

$ git diff > before
$ git diff something_here > save.patch
$ git checkout . 
$ patch < save.patch
$ git diff > after
$ diff before after
$

와 함께something_here 블랭크 거의 작동하는데 파일 이름이 올바르지 않습니다.그냥 선택의 여지가 없는 것 같아요.

실제로는 체크아웃 후에 병합을 할 예정이므로 패치가 실패할 수도 있지만, 제가 무슨 말을 하는지 알 수 있습니다.

잘못된 질문에 대한 내 잘못을 여기서 편집합니다.실제 질문은 변경사항을 저장하고 병합한 다음 가능한 경우 변경사항을 다시 적용하는 것입니다.저는 이런 종류의 문제를 해결하기 위해 패치를 사용하는 것에 익숙하기 때문에 잘못된 방법으로 문의했습니다.git diff그게 내가 원하는 것처럼 보였습니다.

찰스 베일리의 논평은 옳은 답이었습니다.Git-apply는 저에게 적합한 작업입니다(Git-stash는 제가 필요로 하는 것보다 더 무거워 보이고 리베이스 및 번들은 제 현재 기술 수준을 훨씬 초과합니다).저는 찰스가 한 대답을 받아들일 것입니다 (당신이 논평을 받아들일 수 없기 때문에).제안해 주셔서 감사합니다.

편집, 6년 후 그 주제에 익숙한 사람이라면 누구나 알고 있듯이, 저는 그 어려움을 과대평가했습니다.git stash거의 매일 다음과 같은 순서를 사용합니다.

$ git stash
$ git merge
$ git stash pop

편집, 앞으로 5년 동안 나는 대부분 포기했습니다.git apply그리고 사용하지도 마git stash많이.git rebaseFTW.

그냥 사용하기-p1다음을 사용해야 합니다.-p0에서--no-prefix어쨌든, 그래서 당신은 그냥 생략할 수 있습니다.--no-prefix및 사용-p1:

$ git diff > save.patch
$ patch -p1 < save.patch

$ git diff --no-prefix > save.patch
$ patch -p0 < save.patch

패치를 사용하려면 패치를 제거해야 합니다.a/ b/git에서 기본적으로 사용하는 접두사.이 작업을 수행할 수 있습니다.--no-prefix옵션(패치를 사용하여 이 작업을 수행할 수도 있습니다.-p옵션):

git diff --no-prefix [<other git-diff arguments>]

일반적으로 직선으로 사용하는 것이 더 쉽습니다.git diff그런 다음 출력을 사용하여 공급합니다.git apply.

대부분의 경우 텍스트 패치 사용을 피하려고 합니다.보통 리베이스와 결합된 하나 이상의 임시 커밋,git stash번들을 더 쉽게 관리할 수 있습니다.

당신의 사용 사례를 위해 저는 생각합니다.stash가장 적합합니다.

# save uncommitted changes
git stash

# do a merge or some other operation
git merge some-branch

# re-apply changes, removing stash if successful
# (you may be asked to resolve conflicts).
git stash pop

gitdiff에는 파일 경로 앞에 추가 경로 세그먼트가 추가됩니다.다음과 같이 -p1을 패치와 함께 지정하여 경로에서 이 항목을 제거할 수 있습니다.

patch -p1 < save.patch
  1. 현재 HEAD에 대한 현재 디렉터리(커밋되지 않은 파일 포함)의 diff를 저장합니다.
  2. 그러면 당신은 그것을 운반할 수 있습니다.save.patch파일을 원하는 위치(이진 파일 포함)에 저장할 수 있습니다.
  3. 대상 시스다사음패여적치용다니합를하용을서를 사용하여 합니다.git apply <file>

참고: 현재 준비된 파일도 다릅니다.

$ git diff --binary --staged HEAD > save.patch
$ git reset --hard
$ <transport it>
$ git apply save.patch

임시 패치 파일이 생성되지 않도록 하는 유용한 방법은 다음과 같습니다.

git diff | patch -p1 -d [dst-dir]

언급URL : https://stackoverflow.com/questions/4610744/can-i-get-a-patch-compatible-output-from-git-diff

반응형