නිශ්චිත බැඳීමක් සඳහා git patch ජනනය කරන්නේ කෙසේද?


1252

මට SHA1 බැඳීම් අංක ලැයිස්තුවක් සඳහා පැච් නිර්මාණය කරන ස්ක්‍රිප්ට් එකක් ලිවීමට අවශ්‍යයි.

මම භාවිතා කිරීමට උත්සාහ කළෙමි git format-patch <the SHA1>, නමුත් එම SHA1 සිට සෑම බැඳීමක් සඳහාම පැච් එකක් ජනනය විය. පැච් සිය ගණනක් ජනනය කිරීමෙන් පසුව, මට එම ක්‍රියාවලිය විනාශ කිරීමට සිදුවිය.

විශේෂිත SHA1 සඳහා පමණක් පැච් ජනනය කිරීමට ක්‍රමයක් තිබේද?

Answers:


2025

උත්සාහ කරන්න:

git format-patch -1 <sha>

හෝ

git format-patch -1 HEAD

ඉහත ප්‍රලේඛන සබැඳියට අනුව, -1කොඩිය පැච් එකෙහි කොපමණ කොමිට් ප්‍රමාණයක් ඇතුළත් කළ යුතු දැයි කියයි;

- <n>

     ඉහළම කොමිස් වලින් පැච් සකස් කරන්න.


පැච් එක විධානය සමඟ යොදන්න:

git am < file.patch

215
පැච් එක යෙදීම: git apply --stat file.patch# සංඛ්‍යාලේඛන පෙන්වන්න. git apply --check file.patch# අයදුම් කිරීමට පෙර දෝෂයක් තිබේදැයි පරීක්ෂා කරන්න. git am < file.patch# පැච් එක අවසානයේ යොදන්න.
ඒඩ්‍රියන්

4
අවසාන කැපවීම වෙනත් ශාඛාවකින් ඒකාබද්ධ කිරීමක් නම් එය ක්‍රියාත්මක වන බවක් නොපෙනේ.
ලෙක්ස් ලී

2
git am --keep-cr < mypatch.patch
සීආර්එල්එෆ්

43
git am -3 < file.patchත්‍රි-මාර්ග ඒකාබද්ධ කිරීමක් භාවිතයෙන් අයදුම් කිරීමට භාවිතා කරන්න, එමඟින් මෙහි සොයාගත්git mergetool පසු (හෝ අතින් සංස්කරණය කිරීම) භාවිතා කරමින් ගැටුම් නිරාකරණය කිරීමට ඔබට ඉඩ සලසයි .
මතෙ

6
මෙම විධානය කැපවීමෙන් විශේෂිත ගොනුවක් සඳහා පමණක් ක්‍රියා කරයි: git format-patch -1 <sha> path/to/file.jsමෙය ගොනුව සඳහා වෙනස පමණක් අඩංගු පැච් එකක් නිර්මාණය කරයි
ක්‍රිස්ටෝෆ් ඩොම්බි

288

විශේෂිත sha1 හෑෂ් එකකින් ඉහළම කෙළවරේ පැච් උත්පාදනය සඳහා:

git format-patch -<n> <SHA1>

තනි පැච් ගොනුවක හිස සිට අන්තිම පැච් 10:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch

3
පළමු විධානය සඳහා උදාහරණයක් සැපයීමට කරුණාකර ඔබට කාරුණික විය හැකිද
කසුන්

1
git format-patch -1 HEADනවතම කැපවීම සඳහා පැච් ජනනය කරනු ඇත
ශ්‍රීරාම් මුරලි

1
මෙය ඉල්ලා සිටීම ගැන මට සමාව දෙන්න, එබැවින් එය -2නවතම කොමිස් 2 සඳහා පැච් ජනනය කරන විට එය වේ , සහ පැහැදිලි කිරීම සඳහා තවත් එක් දෙයක් නම් විධානය got format-patch -2 HEADරේඛාවට සමාන වේgit format-patch HEAD~2
කසුන්

87

කැපවීම 1 න් පසු ඔබ හැඳුනුම් අංක 2 කර ඇති බව පවසන්න ඔබට ධාවනය කළ හැකි වනු ඇත:

git diff 2 1 > mypatch.diff

2 සහ 1 SHA හැෂ් වේ.


1
පිළිතුර සඳහා ස්තූතියි dookehster. ඒ කියන්නේ මට උනන්දුවක් දක්වන අයට පෙර කළ කොමිස් සොයා ගැනීමට මට පිටපත අවශ්‍යයි. මම එය වළක්වා ගත හැකියැයි සිතුවෙමි.
elle

11
@elle, නෑ, ඔයා එහෙම නෑ - git diff hash^ hash. "හෑෂ් ^" පූර්ව කැපවීම ලබා දෙන්න. (නමුත්, ඇත්ත වශයෙන්ම, මනෝජ්ල්ඩ්ස්ගේ පිළිතුර වඩා හොඳය)
J-16 SDiZ

2
git show HEAD > mypatch.diffඔබ කැපවී සිටින අතරතුරත් එසේ කළ යුතුයි.
andho

1
ook ඩූකෙස්ටර් එය නිවැරදිද නැතහොත් එය වෙනත් ක්‍රමයක්ද,git diff 1 2
කසුන්

1
ඕනෑම ද්විමය ලිපිගොනු වෙනසකට ඇතුළත් කිරීමට මෙය අසමත් වනු ඇත.
stackj

56

මෙම විධානය (දැනටමත් යෝජනා කර ඇති පරිදි @ Naftuli Tzvi Kay ):

git format-patch -1 HEAD

HEADවිශේෂිත හැෂ් හෝ පරාසය සමඟ ප්‍රතිස්ථාපනය කරන්න .

යුනික්ස් තැපැල් පෙට්ටියේ ආකෘතියට සමාන වන පරිදි නවතම කැපවීම සඳහා පැච් ගොනුව ජනනය කරනු ඇත.

-<n> - ඉහළම කොමිස් වලින් පැච් සකස් කරන්න.

එවිට ඔබට පැච් ගොනුව තැපැල් පෙට්ටියක ආකෘතියෙන් නැවත යෙදිය හැකිය:

git am -3k 001*.patch

බලන්න : man git-format-patch.


ස්තූතියි! පැච් එක යෙදීමෙන් [පැච්] විසින් පෙර සැකසූ පණිවිඩයක් සමඟ බැඳීමක් ඇති වන බව සඳහන් කිරීම වටී යැයි මම සිතමි. එය නිවැරදි කිරීම පහසුය
මයික් එස්

2
සංසිද්ධි. OP, ඔබ මෙය පිළිගෙන නැහැ, මොකද ...? Ike මයික්ස් නැත, එය වෙනත් gitහැඩතල ගැන්වූ පැච් එකකට වඩා වැඩි නොවේ, අවම වශයෙන් පරිශීලකයා එය නිවැරදි ආකාරයෙන් ක්‍රියාත්මක කරන්නේ නම්.
underscore_d

2
Ike මයික්ස් මම ඇත්තටම ඒ ගැන සොයා බැලුවේ නැත, නමුත් -kධජය අතහැර දැමීමෙන් ( git am -3) මෙම පෝරමය මා සවි කර ඇත ( PATCH[0/10]පණිවිඩ යැවීමක් නැත ). Git අනුවාදය 2.20.1.windows.1
jannis

36
git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

වේගවත් හා සරල විසඳුමක්.


5
git apply --check patch-file-nameපැච් එකක් යෙදීමට පෙර ඇමතීමට අමතක නොකරන්න . මෙය ගැටළු වළක්වා ගැනීමට උපකාරී වේ.
iamantony

17

නිශ්චිත බැඳීමක් මත (තනි කැපවීම) පැච් එක යෙදෙන බවට ඔබට සහතික වීමට අවශ්‍ය නම්, ඔබට නව git 2.9 (2016 ජූනි) විකල්පය භාවිතා කළ හැකිය git format-patch --base

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

Xiaolong Ye (``) විසින් බැඳීම bb52995 බලන්න , 3de6651 , commit fa2ab86 , commit ded2c09 (2016 අප්‍රේල් 26 ) බලන්න .
( ජූනියෝ සී හමානෝ විසින් ඒකාබද්ධ කරන ලදි - gitster- දී 72ce3ff සිදු 2016 මැයි 23,)

format-patch: --baseමූලික ගස් තොරතුරු වාර්තා කිරීමට විකල්පයක් එක් කරන්න

පැච් ශ්‍රේණියට අදාළ වන මූලික ගස දැන ගැනීමට නඩත්තු කරන්නන්ට හෝ තෙවන පාර්ශවීය පරීක්ෂකයින්ට අවශ්‍ය විය හැකිය. --baseමූලික ගස පිළිබඳ තොරතුරු පටිගත කිරීමට සහ පළමු පණිවිඩයේ අවසානයේ එය එකතු කිරීමට (ආවරණ ලිපිය හෝ මාලාවේ පළමු පැච් එක) git format-patch ' ' විකල්පයක් උගන්වන්න .

පාදක වෘක්ෂ තොරතුරු "පදනම් බැඳීම" වලින් සමන්විත වන අතර එය අනෙක් සියල්ලන්ම ක්‍රියාත්මක වන ව්‍යාපෘති ඉතිහාසයේ ස්ථාවර කොටසෙහි කොටසක් වන සුප‍්‍රසිද්ධ කැපවීමකි. තවද ශුන්‍ය හෝ ඊට වැඩි “පූර්වාවශ්‍යතා පැච්” ද වේ. පැච් යෙදීමට පෙර ස්ථානීය අනුපිළිවෙලින් “පාදක බැඳීම” මත යෙදිය යුතු “පාදක බැඳීම” හි තවමත් කොටසක් නොමැති පියාසැරි වල පැච්.

"පාදක බැඳීම" "" ලෙස දැක්වෙන අතර base-commit:ඉන් පසුව බැඳීම් වස්තු නාමයේ හෙක්ස් 40 කි.
"පූර්වාවශ්‍යතා පැච්" එකක් " prerequisite-patch-id:" ලෙස පෙන්වන අතර හෙක්ස් 40 "පැච් හැඳුනුම්පත" අනුගමනය කරයි, එය " git patch-id --stable" විධානය හරහා පැච් එක පසු කිරීමෙන් ලබා ගත හැකිය .


Git 2.23 (Q3 2019) එය වැඩිදියුණු කරනු ඇත, මන්දයත් " --base" විකල්පය " format-patch" patch-idsපූර්වාවශ්‍යතා පැච් සඳහා අස්ථායී ආකාරයකින් ගණනය කර ඇති අතර එය " git patch-id --stable" සමඟ අනුකූල වන පරිදි ගණනය කිරීම සඳහා යාවත්කාලීන කර ඇත .

කැපවීම a8f6855 බලන්න , 6f93d26 (26 අප්‍රේල් 2019) ස්ටීවන් බොයිඩ් ( akshayka) විසින් සිදු කරන්න .
(විසින් අලුතින් ඒකාබද්ධ ජූනි සී Hamano - gitster- දී 8202d12 සිදු , 13 ජූනි 2019)

format-patch: --base patch-idප්‍රතිදානය ස්ථාවර කරන්න

patch-idපරම්පරාවේ කේතයේ හක්කක් සකසන සෑම අවස්ථාවකම අපි සන්දර්භය ගලවා නොගත්තෙමු diff.c, නමුත් අපි එය කළේ patch-idමෙවලම සමඟ “ස්ථාවර” පැච්-අයිඩී ජනනය කරන විටය .

සිට පුරා සමාන තර්කණයෙන් එහෙනම් අපි වරාය patch-id.cබවට diff.cවිට 'සඳහා අපි ඉන්නේ උත්පාදන ලප-හැඳුනුම් පත් අපිට එකම හැෂ් ලබා ගත හැකි format-patch --base=' විධානය යාතිකා වර්ග.


Git 2.24 (Q4 2019) ට පෙර, " git format-patch -o <outdir>" නිවැරදි කර ඇති " mkdir <outdir>" නොවේ " mkdir -p <outdir>" ට සමාන විය .

බර්ට් වෙසාර්ග් ( ) විසින් බැඳ ඇති edefc31 (11 ඔක්තෝබර් 2019) බලන්න . (විසින් අලුතින් ඒකාබද්ධ ජූනි සී Hamano - - දී f1afbb0 සිදු , 18 ඔක්තෝබර් 2019)bertwesarg
gitster

format-patch: ප්‍රතිදාන නාමාවලියෙහි ප්‍රමුඛ කොටස් සාදන්න

අත්සන් කළේ: බර්ට් වෙසාර්ග්

'git format-patch -o' නිවැරදි කළේ 'mkdir' නොව 'mkdir -p' ය.

adjust_shared_permආරක්ෂක ඇඟවුම් ඇති විය හැකි ප්‍රමුඛ පෙළේ නාමාවලිවල ' ' භාවිතා කිරීමෙන් වළකින්න . ' config.sharedRepository' වැනි ' git init' තාවකාලිකව අක්‍රීය කිරීමෙන් සාක්ෂාත් කරගනු ලැබේ .


Git 2.25 (Q1 2020) සමග, " git rebaseවිට" හොඳින් වැඩ කටයුතු කළේ නැත format.useAutoBaseවින්යාස විචල්ය නිවැරදි කර ඇති කට්ටලයක්, වේ.

කැපවීම cae0bc0 බලන්න , 945dc55 කරන්න , 700e006 කරන්න , a749d01 කරන්න , 0c47e06 (2019 දෙසැම්බර් 04) කරන්න ඩෙන්ටන් ලියු ( Denton-L) .
(විසින් අලුතින් ඒකාබද්ධ ජූනි සී Hamano - gitster- දී 71a7de7 සිදු , 16 දෙසැම්බර් 2019)

rebase: format.useAutoBaseකැඩී යාම නිවැරදි කරන්න

වාර්තා කළේ: ක්‍රිස්ටියන් බයිසින්ගර්
අත්සන් කළේ: ඩෙන්ටන් ලියු

සමඟ format.useAutoBase = true, නැවත ධාවනය ක්‍රියාත්මක කිරීමේදී දෝෂයක් ඇතිවිය:

fatal: failed to get upstream, if you want to record base commit automatically,
please use git branch --set-upstream-to to track a remote branch.
Or you could specify base commit by --base=<base-commit-id> manually
error:
git encountered an error while preparing the patches to replay
these revisions:

ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12

As a result, git cannot rebase them.

ප්‍රතිනිර්මාණයෙන් සෑම විටම --no-baseආකෘති-පැච් වෙත යොමු කිරීමෙන් මෙය නිවැරදි කරන්න, එවිට එහි බලපෑම format.useAutoBaseප්‍රතික්ෂේප වේ.


9

නිශ්චිත බැඳීමකින් මාර්ගය උත්පාදනය කිරීම සඳහා (අවසාන කැපවීම නොවේ):

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE

5

ඔබට නිශ්චිත ගොනුව වෙනස් කිරීමට අවශ්‍ය නම්, ඔබට:

git diff master 766eceb - සම්බන්ධතා /> 000-mysql-connectctor.patch


1

මගේ රසදිය පසුබිම සමඟ මම භාවිතා කිරීමට යන්නේ:

git log --patch -1 $ID > $file

නමුත් මම git format-patch -1 $IDදැන් භාවිතා කිරීමට සලකා බලමි .


-5

විශේෂිත SHA1 සඳහා පමණක් පැච් ජනනය කළ හැකි ක්‍රමය කුමක්ද?

එය තරමක් සරල ය:

විකල්ප 1. git show commitID > myFile.patch

විකල්ප 2. git commitID~1..commitID > myFile.patch

සටහන: commitIDතථ්‍ය බැඳීම් හැඳුනුම්පත (SHA1 බැඳීමේ කේතය) සමඟ ප්‍රතිස්ථාපනය කරන්න .


3
1 වන විකල්පය වැරදියි, එය ප්‍රශ්නයට සම්බන්ධ නැත.
අන්ෂුමන් මන්රල්

3
විකල්ප 2 ද අවලංගු විධානයකි. GIT a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 ~ 1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 GIT: ඔබ වැනි දෝෂයක් ලැබෙනු ඇත '' a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 ~ 1..a5f4bcaeb7fa7de27ae79d9522332e872889bbf0 'යනු GIT ආඥාවක් නොවේ. 'Git --help' බලන්න. පිළිතුරු පළ කිරීමට පෙර කරුණාකර පරීක්ෂා කරන්න
අන්ෂුමන් මන්රල්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.