programing

새 파일을 포함하는 'git add --patch'?

stoneblock 2023. 10. 11. 20:28

새 파일을 포함하는 'git add --patch'?

는.git add -p할 수 ?

그래서 만약 내가 새로운 파일을 만든다면,foo.java -p를 하지 못하게 git add -p git 는를 합니다.

내가 노력했을때git add -p someNewFile.txt새로운 되지 않은 일일)에서, git입니다를 합니다.No changes.그리고 멈춰요.저는 먼저 새 파일을 추적할 생각이라고 말해야 했습니다.

git add -N someNewFile.txt
git add -p

그러나 파일이 추적되지 않았기 때문에 분할할 수 없는 하나의 거대한 덩어리로 표시됩니다(모두 새 파일이기 때문입니다!).그래서, 그 다음에 저는 혹을 더 작은 비트로 편집해야 했습니다.잘 모르실 경우 이 참조를 확인하여 시작하십시오.

업데이트 - Hunk 편집 정보 위의 참조가 없어질 경우를 대비하여 업데이트하고 싶었습니다.새 파일이 추적되지 않았기 때문에git add -p파일의 모든 행을 한 번에 새 행으로 표시합니다.그러면 해당 Hunk로 수행할 작업을 묻는 메시지가 표시되며 다음과 같은 메시지가 표시됩니다.

Stage this hunk [y,n,q,a,d,/,e,?]?

하면, hunk 를를 사용하려는 잘입니다. ; 입니다.git add -p우?)합니다.e훈크를 편집하고 싶다고 말하는 거죠

hunk를 편집하고 싶다고 말하면, 선택한 편집기에 입력하여 변경할 수 있습니다.다 은이 합니다.+git다가 섞인)가 . 는을다합니다.#파일 끝에 있습니다.파일의 초기 커밋에서 원하지 않는 행을 삭제하기만 하면 됩니다.그런 다음 저장하고 편집기를 종료합니다.

깃의 hunk 옵션에 대한 깃의 설명:

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

모든 새 파일을 포함하려면 다음을 실행할 수 있습니다.

git add -N .
git add -p

수 .~/.bashrc:

alias gapan='git add --intent-to-add . && git add --patch'

N.B: 새 파일이 비어있는 상태에서 이 파일을 사용하면 git에서 패치를 적용할 수 없고 다음 파일로 건너뜁니다.

캣슈즈의 대답은 다음과 같습니다.

내가 노력했을때git add -p someNewFile.txt새 파일(추적되지 않은 파일)에서 git는 변경사항 없음을 출력합니다.그리고 멈춰요.
저는 먼저 새 파일을 추적할 생각이라고 말해야 했습니다.

git add -N someNewFile.txt
git add -p

그것은 Git 2.29 (2020년 4분기)와 함께 곧 바뀔 것입니다.

""git diff-files(man)의 최근 버전은 "새로운 파일" 패치로서 "추가할 의도" 경로에 대한 인덱스와 작업 트리 사이의 차이를 보여줍니다.
"git apply --cached"가져갈git apply --cached(man) 수 있어야 합니다."git diff-files" "와 동등한 역할을 해야 합니다.git add" 경로에 대해 명령을 실행할 수 없습니다.

레이먼드 E커밋 4c025c6, 커밋 e3cc41b(2020년 8월 8일), 커밋 7cfde3f(2020년 8월 6일)를 참조하십시오. 파스코().juped
(2020년 8월 17일 준오 C 하마노 ---- 커밋 ca81676에 합병)

applyi-t-a 항목에 "새 파일" 패치 apply허용

Help-by: 주니오 C 하마노
사인-오프: 레이먼드 E.파스코

diff-files인덱스에서 "추가할 intent"로 표시된 경로의 변경 사항을 빈 blob의 diff가 아닌 새 파일 diff로 처리하도록 최근에 변경되었습니다.

,apply는 이름 변경의 경우를 제외하고 기존 인덱스 항목 위에 새 파일 차이를 적용하기를 거부합니다.
이로 인해 추가 의도가 기록되었을 때 파일에서 Hunk를 스테이징하려고 할 때 apply를 사용하는 ""git add -p(man)가 실패합니다.

은 .check_to_create()다음 두 가지 방법으로 인덱스에 항목이 이미 존재하는지 확인합니다.

  • 은 , 입니다의 합니다.ok_if_exists거짓입니다.
  • 로, 합니다를 CE_INTENT_TO_ADD찾은 인덱스 항목에 플래그를 지정하고 설정된 경우 적용을 진행할 수 있도록 허용합니다.

그리고:

4분기)로Git 2.29(2020년 4 )",add -p할 수 .

필립 우드()phillipwood커밋 75a009d(2020년 9월 9일)를 참조하십시오.
(2020년 9월 22일 주니오 C 하마노 ---- 커밋 458205f)

add -p추가할 의도 경로 편집 add -p수정

사인-오프: 필립 우드
보고된 기준:토마스 설리번
보고된 기준:유천잉

새 파일을 부분적으로 스테이징하는 일반적인 방법은 의 hunk 편집을 사용하여 사용자가 스테이징할 파일의 부분을 선택하는 것입니다.

85953a3187("diff-files --raw: intent-to-add 파일의 올바른 포스트 이미지를 보여줍니다", 2020-07-01, Git v2.28.0-rc0 --batch #7나열된 병합) 이후로 intent-to-add 경로가 이제 빈 blob의 변경 사항이 아닌 새 파일로 표시됨에 따라 작동이 중지되었으며 intent-to-add로 표시된 경로에 대한 생성 패치 적용을 거부했습니다. 7cfde3fa0f(")apply: i-t-a 엔트리에 "새 파일" 패치 허용, 2020-08-06) apply 문제를 해결했지만 추가된 hunk를 제대로 편집할 수 없었습니다.

2c8 bd8471a (")checkout -p: 새 파일을 올바르게 처리", 2020-05-27, Git v2.28.0-rc0 -- 배치 #2에 나열된 병합)은 이전에 변경되었습니다.add -p새 파일을 처리하는 데 패치 편집이 제대로 구현되지 않았습니다.
펄 버전은 단순히 편집을 금지했고 C 버전은 사용자가 hunk 헤더를 수동으로 편집해야 작동할 수 있다는 것을 의미하는 hunk 대신 전체 diff로 편집기를 열었습니다.

문제의 근본 원인은 추가된 파일이 diff 헤더를 다른 변경 사항과 같이 분리하지 않고 hunk 데이터와 함께 저장하기 때문입니다.diff 헤더를 저장하기 위해 추가된 파일을 별도로 변경하면 diff 헤더에만 연결된 청크가 더 이상 없기 때문에 빈 추가를 특수한 경우로 지정해야 하는 비용으로 편집 문제를 해결할 수 있습니다.

된 내용은 기존 합니다를 하는 것이 .--color-moved-ws=allow-indentation-change(또는--ignore-space-change변경 사항에 대한 개요를 파악하는 데 효과적입니다.)


Git 2.32 (2021년 2분기)를 통해 좀 더 명확한 정보가 추가되었습니다.

피터 올리버()mavit커밋 7a14acd(2021년 4월 27일) 참조.
(주니오 C 하마노 ---- 2021년 5월 7일 e60e9cc 커밋에 합병)

docdoc패치 형식 문서의 diff 속성을 가리킵니다.

사인-오프: 피터 올리버

diff 관련 명령어를 사용하여 패치 텍스트를 생성하는 설명서에서 diff 속성에 대한 설명서를 참조하십시오.

이 속성은 패치 생성 방식에 영향을 미치지만 이전에는 manpage와 같은 경우에는 언급되지 않았습니다.

diff-generate-patch이제페이지에 포함됩니다.

  1. Hunk 헤더는 Hunk가 적용되는 함수의 이름을 언급합니다.특정 언어에 맞게 조정하는 방법에 대한 자세한 내용은 의 "사용자 지정 hunk-header 정의"를 참조하십시오.

git add -p이미 추적된 파일에 변경사항을 추가하는 것에 관한 것입니다.

git add -i를 들어 예를 들어,

$ git add -i

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
What now> a
  1: another-new.java
  2: new.java
Add untracked>> 2
  1: another-new.java
* 2: new.java
Add untracked>> 
added one path

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
What now> q
Bye.
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   new.java

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        another-new.java

(실제 명령어는 여기서 잘라붙일 수 없었던 색상이 있어서 보기보다 좋네요)

사실, 패치 명령은git add -i다와 합니다.git add -p한다는 것을 하더라도, 입니다 (하더라도)add -p도 하고, 밉기도 하고,add -i나 자신!)

를 한 매우 --cached깃발...

1) 추가된 파일처럼 단계별 변경사항을 단계별 변경사항으로 변경합니다.

git add edited-file.txt
git add new-file.txt
git add directory-of-changes/

2) diff를 보세요(참고: 편집과 새 파일을 모두 포함할 수 있습니다).

git diff --cached

3) 패치를 만듭니다.

git diff --cached > my_patch_file.patch

은 를 해서 한 할 수 있습니다.git add --intent-to-add -p .행동은 같지만 반복은 피합니다.

언급URL : https://stackoverflow.com/questions/14491727/git-add-patch-to-include-new-files