programing

Windows에서 다른 패치를 적용하려면 어떻게 해야 합니까?

subpage 2023. 4. 29. 09:20
반응형

Windows에서 다른 패치를 적용하려면 어떻게 해야 합니까?

다른 패치를 만들 수 있는 프로그램들이 많이 있지만, 저는 그 패치를 적용하기 위해 많은 시간을 보내고 있습니다.패치를 배포하려고 하는데 사용자에게 패치 적용 방법에 대한 질문을 받았습니다.그래서 제가 스스로 알아내려고 노력을 해보니 전혀 단서가 없고 제가 찾을 수 있는 도구들은 대부분 명령 줄입니다.(명령줄은 다룰 수 있지만, 친절하고 친절한 GUI가 없다면 많은 사람들이 길을 잃게 될 것입니다.따라서 이러한 목적에는 적합하지 않습니다.)

나는 거북이를 사용해 보았습니다.SVN. 제가 바르고 싶은 패치가 있어요.패치를 마우스 오른쪽 버튼으로 클릭하면 거북이 아래에 옵션이 있습니다."Apply patch(패치 적용)"라는 SVN 하위 메뉴.그것은 단지 빈 창문을 끌어 올리는 것뿐입니다.

그래서 저는 Open을 쳐봤습니다.통합 diff를 병합하고 적용하는 두 가지 옵션이 있습니다. (다행히 패치는 통합 diff 형식입니다.)그러나 적용 옵션은 일반적으로 작동하지 않습니다.패치와 폴더를 요청합니다.어쩐지 패치를 적용할 파일을 요청하는 것을 잊었습니다!소 거북이SVN은 그냥 일반적으로 작동하지 않습니다.패치와 파일을 가져와서 제대로 적용할 Windows GUI 기반 유틸리티가 있습니까?

EDIT: 지금까지 답변을 보니, Torothy는 이미 버전이 된 파일일 경우에만 제대로 할 것 같습니다.여기서는 그렇지 않습니다.SVN 저장소에서 나오지 않은 파일에 패치를 적용할 수 있어야 합니다.저는 SVN이 diff를 사용한다는 것을 알고 있기 때문에 Tortoo를 사용해 보았습니다. 그리고 그것들을 만들고 적용하는 방법을 알아야 하기 때문입니다.

패치 적용

거북이 병합 사용:

  1. 기존 SVN repo 디렉토리를 찾아서 엽니다.
  2. 이름이 "merges"인 새 디렉토리를 작성합니다(이미 존재하지 않는 경우).
  3. .patch 파일을 적용할 파일을 복사합니다.
  4. 다음 단계로 계속 진행하기 전에 svn 저장소에 추가 및 커밋
  5. 병합을 마우스 오른쪽 버튼으로 클릭하고 패치 적용...을 선택합니다.
  6. 목록에서 파일을 두 번 클릭합니다.
  7. diff가 있는 패치된 파일이 오른쪽 창에 표시됩니다.
  8. 해당 창을 클릭하고 파일로 저장 또는 내보내기 ->다른 이름으로 저장...을 누릅니다.

TortoorMerge에서 여는 경우 대체 화면입니다.는 위의합니다: "merges" 디렉토리는 "merges" 디렉토리입니다.스크리닝

: WinMerge GUI:스크리닝

저는 그것을 위해 순수한 파이썬 도구를 만들었습니다.예측 가능한 교차 플랫폼 동작을 가지고 있습니다.새 파일을 만들지 않고(이 파일을 작성할 때) GUI가 부족하지만, 그래픽 도구를 만드는 라이브러리로 사용할 수 있습니다.

업데이트: Python이 설치되어 있다면 더욱 편리하게 사용할 수 있을 것입니다.

pip install patch
python -m patch

Git 설치의 patch.exe 유틸리티는 윈도우즈 10에서 작동합니다.

Git for Windows를 설치한 다음"C:\Program Files\Git\usr\bin\patch.exe"패치를 적용하는 명령입니다.

다음과 같은 오류 메시지가 있을 경우Hunk #1 FAILED at 1 (different line endings).패치를 적용하는 동안 출력에 표시되었습니다. 추가해 보십시오.-l(이것이 바로 다음을 위한 지름길입니다.--ignore-whitespace ) 또는--binary명령줄로 전환합니다.

TortooMerge는 Tortoo와 함께 제공되는 별도의 유틸리티입니다.SVN.

TortoeDiff.zip 아카이브에서 별도로 다운로드할 수도 있습니다.이렇게 하면 버전이 아닌 파일에 유니파이드 디프를 적용할 수 있습니다.

GUI를 선호한다고 말씀하신 건 알지만, 명령줄 도구는 잘 작동할 것입니다.Windows에 대한 유닉스 도구 포트는 GnuWin을 참조하십시오.패치 명령이 필요할 것입니다. 분명히 ;-)

하지만 회선 종료 시 문제가 발생할 수 있습니다.GnuWin 포트는 패치 파일에 CR/LF(DOS 스타일 줄 끝)가 있다고 가정합니다.합리적으로 똑똑한 편집기에서 패치 파일을 열려고 하면 변환됩니다.

거북이에서SVN, 패치 적용은 작동합니다.패치를 생성한 디렉터리와 동일한 디렉터리에 적용해야 합니다.이것을 항상 명심하는 것이 중요합니다.거북이에서 어떻게 하는지 알아보겠습니다.SVN:

패치를 적용할 폴더를 마우스 오른쪽 단추로 클릭합니다.패치 파일의 위치를 묻는 대화 상자가 나타납니다.파일을 선택하면 변경된 파일을 나열하는 작은 파일 목록 창이 열리고 각 항목을 클릭하면 패치가 해당 파일에 대해 수행하려는 작업을 보여주는 다른 창이 열립니다.

행운을 빌어요.

패치 유틸리티의 이 Win32 기본 포트를 사용할 수 있습니다.

Cygwin 및 유사한 것과 달리 더 많은 다른 유틸리티와 함께 제공되며 DLL 또는 유사한 것이 필요하지 않습니다.작은 실행 파일을 선택하여 원하는 곳에 저장하기만 하면 됩니다.

단순 사용:

patch.exe -i <patchfile>

추가 도움말 보기:

patch.exe --help

저는 http://www.msys2.org/ 의 MSYS2를 사용합니다.

다음과 같은 많은 유틸리티를 제공합니다.patch,which,git,tree그리고 더 많은 것들.

한 후 하여 MSYS2를 설치하기만 하면 .patch:

pacman -S patch

EDIT: 지금까지 답변을 보니, Torothy는 이미 버전이 된 파일일 경우에만 제대로 할 것 같습니다.여기서는 그렇지 않습니다.SVN 저장소에서 나오지 않은 파일에 패치를 적용할 수 있어야 합니다.저는 SVN이 디프를 사용한다는 것을 알게 되었고, 디프를 생성하고 적용하는 방법을 모두 알아야 한다는 것을 알게 되었기 때문에 Tortoo를 사용해 보았습니다.

Cygwin을 설치한 다음 명령줄 패치 도구를 사용하여 패치를 적용할 수 있습니다.패치에 적용되는 이 Unix man 페이지도 참조하십시오.

보아하니 거북이가SVN(TortoiseMerge)을 사용하려면 diff/patch 파일에 줄이 있어야 합니다.이것이 제가 거북이가 아닌 것을 만들기 위해 필요한 것입니다.SVN 패치 파일 작업 Tortoole.SVN의 마우스 오른쪽 버튼 패치 적용 명령입니다.

이전:

--- foobar.py.org   Sat May 08 16:00:56 2010
+++ foobar.py   Sat May 08 15:47:48 2010

이후:

Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py   (working copy)

또는 기여자가 작업하던 특정 개정판을 알고 있는 경우:

Index: foobar.py
===================================================================
--- foobar.py   (revision 1157)
+++ foobar.py   (working copy)

저는 이미 BeyondCompare(상업용)를 diff와 merge에 사용하고 있으며, 이 도구는 패치를 생성, 확인 및 적용하는 기능도 가지고 있습니다.

패치는 적용할 파일을 알려줍니다.머리글은 다음과 같아야 합니다(메모장 또는 즐겨찾기 텍스트 편집기에서 보기).

--- Folder/old_file
+++ Folder/new_file

하위 버전 패치의 경우 파일 이름이 같기 때문에 리비전 번호도 있습니다.

GNU 패치를 사용하면 해당 이름을 재정의할 수 있지만, 동일하게 할 수 있는 GUI 도구는 없습니다.다양한 diff 프로그램을 확인하고 싶지만 WinMerge가 패치 적용을 지원하지 않는 것 같습니다.

Eclipse는 이를 수행할 수 있어야 합니다. 팀 동기화 관점으로 이동한 다음 프로젝트로 이동합니다. ->패치 적용

Java 프로젝트의 경우 NetBeans를 사용하여 패치 파일을 적용했습니다.패치 중인 Java 코드가 NetBeans 프로젝트가 아닌 경우 해당 프로젝트를 만듭니다.새 프로젝트를 만드는 방법

  • 메뉴 파일 선택 -> 새 프로젝트
  • 결과 대화상자에서 Java Application 프로젝트로 만듭니다.대화 상자에서 이름을 지정하고 를 클릭합니다.
  • 프로젝트 이름을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 속성을 선택합니다.
  • 결과 대화상자에서 소스를 선택하고 소스 폴더를 추가합니다.Java 소스를 찾습니다.

이제 프로젝트가 생겼으니 패치를 적용하십시오.

  • 프로젝트를 강조 표시하여 선택
  • 메인 메뉴에서 메뉴 Tools -> Apply Diff Patch를 선택합니다.
  • 결과 대화 상자에서 패치 파일을 찾아 선택한 다음 패치 버튼을 누릅니다.

바로 그겁니다.패치가 적용되어야 하며 변경 사항이 표시된 다른 창이 나타납니다.

Mercurial을 사용하는 경우 "가져오기"를 통해 수행됩니다.그래서 명령 줄에서hg import명령, 또는 (당신은 찾을 수 있습니다.--no-commit옵션 유용) 또는 "리포지토리" => "가져오기...Hg Workbench입니다.

기본적으로 변경 사항이 커밋되므로 다음을 사용하여 이 변경 사항을 방지할 수 있습니다.hg import --no-commit 또는 Hg Workbench를 에는 option을 발행하는 것이 할 수 .hg rollback합병 후에

gitDiff 또는 리눅스 패치를 사용하여 gitDiff를 사용하여 윈도우즈에 패치 적용

GNU 패치 명령 또는 gitdiff를 사용하여 Linux, MacOS 또는 기타 어디에서나 생성된 패치는 git apply를 사용하여 창에 모두 적용할 수 있습니다.

패치 생성

예를 들어 1개 이상의 파일이 변경된 2개의 디렉토리에서 패치를 생성하는 경우:

diff -Naru original_dir modified_dir > 0001-path-file.patch

  • "-N"은 없는 파일을 빈 파일로 처리합니다. 수정된 내용만 고려해야 합니다.
  • "-a"는 이진 패치를 처리할 경우 모든 파일을 필수가 아닌 텍스트로 처리해야 합니다.
  • 디렉터리 트래버설에 대한 "-r" 재귀
  • "-u"는 기본적으로 모든 디프 주위에 세 줄의 컨텍스트를 추가합니다.

또는 git diff를 사용하여

git diff original_dir modified_dir > 0001-path-file.patch

그런 다음 윈도우즈 환경의 .patch 파일과 변경되지 않은 원래 파일이 들어 있는 original_dir 디렉터리를 복사합니다.

git diff로 적용:

  • 필수 구성 요소:https://git-scm.com/downloads 에서 Git를 설치합니다.

1 상위 디렉토리에 패치 파일 복사

원본 디렉터리에 2cd 삽입

3 git apply를 사용하여 패치를 적용합니다.

copy 0001-path-file.patch ..\original_dir\
cd original_dir
git apply < 0001-path-file.patch

Tortoo를 사용하여 패치 적용 시SVN, 일반적으로 체크아웃된 리포지토리의 루트에 경로를 저장합니다.그런 다음 패치를 마우스 오른쪽 버튼으로 클릭하고 거북이로 이동할 수 있습니다.SVN 메뉴를 클릭하고 패치 적용을 클릭합니다.ApplyPatch는 디렉터리 계층에서 패치가 생성된 수준을 자동으로 파악해야 합니다.

그러나 이전에는 새 파일을 포함하거나 파일 이름을 변경하는 패치를 적용하는 데 문제가 있었습니다.거북이가 이를 위해 사용하는 알고리즘이 무엇이든 간에 이러한 시나리오를 잘 처리하지 못하는 것 같습니다.유니코드에서도 비슷한 문제가 발생할 수 있습니다.

모니터가 두 개 있습니까?TorothyMerge와 같은 문제를 겪고 있었는데 모니터 중 하나를 비활성화했을 때 파일 목록이 있는 작은 창이 표시된다는 것을 깨달았습니다.이것이 도움이 되길 바랍니다.

"Not working copy" 오류 메시지가 표시되면 SVN의 작업 디렉토리인 TortooMerge 대화 상자에서 디렉토리를 선택해 보십시오.

윈도우즈용 BusyBox 포트에는 diff 및 patch 명령이 모두 있지만 통합 형식만 지원됩니다.

그냥 사용:

patch -p0 < path-file.patch

패치를 만든 폴더 위치에서만 이 명령을 실행합니다.

Windows에 git가 설치되어 있고 git 저장소용 패치를 적용하려면 Windows Power Shell에서 다음 작업을 수행하면 됩니다.

git apply ..\0001-your-patch.patch

패치 및 파이썬 3에 대한 이전 쿼리에 대해 TypeError: str만 연결할 수 있습니다("바이트"가 아님).

해결책은 _normalize_filenames 함수에서 소스를 변경하는 것이었습니다.

-        debug("    target = " + p.target)
-        debug("    source = " + p.source)
+        debug("    target = ", p.target)
+        debug("    source = ", p.source)

패치가 잘 작동했습니다(Python 3, Windows 10).

언급URL : https://stackoverflow.com/questions/517257/how-do-i-apply-a-diff-patch-on-windows

반응형