මගේ වැඩ කරන නාමාවලියෙහි මා විසින් වෙනස් නොකළ වෙනස්කම් ඇති බව පවසන්න. බැඳීමක් ඇති නොකර මම ඔවුන්ගෙන් පැච් එකක් සාදා ගන්නේ කෙසේද?
මගේ වැඩ කරන නාමාවලියෙහි මා විසින් වෙනස් නොකළ වෙනස්කම් ඇති බව පවසන්න. බැඳීමක් ඇති නොකර මම ඔවුන්ගෙන් පැච් එකක් සාදා ගන්නේ කෙසේද?
Answers:
git diff
අස්ථිර වෙනස්කම් සඳහා.
git diff --cached
වේදිකාගත වෙනස්කම් සඳහා.
git diff HEAD
වේදිකාගත කර ඇති සහ වේදිකාගත නොකළ වෙනස්කම් සඳහා.
git format-patch
ද්විමය වෙනස්කම් සහ සමහර මෙටා තොරතුරු ද ඇතුළත් වේ. ඇත්ත වශයෙන්ම එය පැච් එකක් සෑදීම සඳහා හොඳම ඔට්ටුව වනු ඇත, නමුත් අෆයික් මෙය ක්රියාත්මක වන්නේ ප්රභවයන් / වෙනස්කම් පරීක්ෂා කිරීම සඳහා පමණි, නේද?
git diff --relative
ඔබ තවමත් වෙනස්කම් සිදු කර නොමැති නම්:
git diff > mypatch.patch
නමුත් සමහර විට එය සිදුවන්නේ ඔබ කරන දේවල් වලින් කොටසක් අළුත් ලිපිගොනු සොයා නොගත් අතර ඒවා ඔබේ git diff
ප්රතිදානයේ නොතිබෙනු ඇත . එබැවින්, පැච් එකක් කළ හැකි එක් ක්රමයක් නම්, සෑම දෙයක්ම නව කැපවීමක් සඳහා ( git add
සෑම ගොනුවක්ම හෝ හුදෙක්ම git add .
) වේදිකා ගත කිරීමයි .
git diff --cached > mypatch.patch
පැච් එකට ද්විමය ගොනු එක් කිරීමට අවශ්ය නම් 'ද්විමය' විකල්පය එක් කරන්න (උදා: mp3 ගොනු):
git diff --cached --binary > mypatch.patch
ඔබට පසුව පැච් එක යෙදිය හැකිය:
git apply mypatch.patch
සටහන: ඔබට --staged
සමාන පදයක් ලෙසද භාවිතා කළ හැකිය --cached
.
git diff --no-color
. එසේ නොමැතිනම් එය කේතීකරණ ගැටලුවක් සේ පෙනේ.
git diff --staged > mypatch.patch
, මන්ද --staged
එයට සමාන පදයකි --cached
. මම හිතන්නේ මතක තබා ගැනීම පහසුයි.
git diff
සහ git apply
පෙළ ගොනු සඳහා ක්රියා කරනු ඇත, නමුත් ද්විමය ගොනු සඳහා ක්රියා නොකරනු ඇත.
ඔබට පහසුවෙන් සම්පූර්ණ ද්විමය පැච් එකක් සෑදිය හැකිය, නමුත් ඔබට තාවකාලික බැඳීමක් නිර්මාණය කිරීමට සිදුවනු ඇත. ඔබ ඔබේ තාවකාලික බැඳීම් (ය) කළ පසු, ඔබට මෙම පැච් එක සෑදිය හැකිය:
git format-patch <options...>
ඔබ පැච් එක සෑදූ පසු, මෙම විධානය ක්රියාත්මක කරන්න:
git reset --mixed <SHA of commit *before* your working-changes commit(s)>
මෙය ඔබගේ තාවකාලික බැඳීම් (ය) ආපසු හරවනු ඇත. අවසාන ප්රති result ලය මඟින් ඔබ මුලින් කළ වෙනස්කම් සමඟම ඔබගේ වැඩ කරන පිටපත (හිතාමතාම) අපිරිසිදු වේ.
ලැබීමේ පැත්තෙන්, කැපවීමේ ඉතිහාසය නොමැතිව, වැඩ කරන පිටපතෙහි වෙනස්කම් යෙදීම සඳහා ඔබට එකම උපක්රමය භාවිතා කළ හැකිය. පැච් (එස්), සහgit reset --mixed <SHA of commit *before* the patches>
.
මෙම සම්පූර්ණ විකල්පය වැඩ කිරීම සඳහා ඔබ හොඳින් සමමුහුර්ත විය යුතු බව සලකන්න. පැච් සෑදීමේදී යම් යම් දෝෂ මා දැක ඇති අතර ඒවා සාදන පුද්ගලයා මා සතුව ඇති තරම් වෙනස්කම් පහතට ගෙන නොමැත. එය වැඩ කිරීමට ක්රම බොහෝ විට ඇත, නමුත් මම ඒ ගැන වැඩි දුරක් සොයා බැලුවේ නැත.
ඉබ්බා Git හි එකම පැච් නිර්මාණය කරන්නේ කෙසේද යන්න මෙන්න (මම එම මෙවලම භාවිතා කිරීමට නිර්දේශ කරමි):
Tortoise Git
->Create Patch Serial
Since
:FETCH_HEAD
ඔබ හොඳින් සමමුහුර්ත කර ඇත්නම් ක්රියා කරනු ඇත)Tortise Git
->Show Log
reset "<branch>" to this...
Mixed
විකල්පය තෝරන්නඒවා ක්රියාත්මක කරන්නේ කෙසේද:
Tortoise Git
->Apply Patch Serial
Tortise Git
->Show Log
reset "<branch>" to this...
Mixed
විකල්පය තෝරන්නනවීකරණය කරන ලද සහ නව ලිපිගොනු (වේදිකාගත) සහිත පැච් එකක් සෑදීමට ඔබට ධාවනය කළ හැකිය:
git diff HEAD > file_name.patch
git diff --cached > mypatch.patch
ක්රියා නොකරයි.
file_name.patch
විසින් භාවිතා කළ patch
විධාන? ඔවුන් එකිනෙකා සමඟ අනුකූලද?
git diff HEAD > file-name.patch
උදා: ඔබ විසින් සාදන ලද ඔබේ පැච් එක පහත පරිදි භාවිතා කළ හැකිය :patch --forward --strip=1 < file-name.patch
මම කැමතියි:
git format-patch HEAD~<N>
<N>
පැච් ලෙස සුරැකීමට අවසන් වරට කළ යුතු ගණන.
විධානය භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ විස්තර DOC හි ඇත
UPD
මෙන්න ඔබට ඒවා අදාළ කර ගත හැකි ආකාරය සොයාගත හැකිය.
UPDformat-patch
අන්වර්ථය එකතු කිරීමේ අදහස නොලැබූ අය සඳහා :
git config --global alias.make-patch '!bash -c "cd ${GIT_PREFIX};git add .;git commit -m ''uncommited''; git format-patch HEAD~1; git reset HEAD~1"'
ඔබේ ව්යාපෘති ගබඩාවේ ඕනෑම නාමාවලියක දී:
git make-patch
මෙම විධානය 0001-uncommited.patch
ඔබගේ වර්තමාන නාමාවලියෙන් සාදනු ඇත. පැච් හි ඊළඟ විධානයට පෙනෙන සියලුම වෙනස්කම් සහ හඳුනා නොගත් ගොනු අඩංගු වේ:
git status .
සාපේක්ෂ වෙනස්කම් සහිත ලිපිගොනු පමණක් ඇතුළත් කිරීම සඳහා අපට ලිපිගොනු නියම කළ හැකිය, විශේෂයෙන් ඒවා බහු බහලුම් වලින් විහිදෙන විට
git diff ~/path1/file1.ext ~/path2/file2.ext...fileN.ext > ~/whatever_path/whatever_name.patch
මෙය පිළිතුරු හා අදහස් වල නිශ්චිතව දක්වා නොමැති බව මට පෙනී ගියේය, ඒවා සියල්ලම අදාළ සහ නිවැරදි ය, එබැවින් එය එක් කිරීමට තෝරා ගත්තේය. ව්යංගයට වඩා පැහැදිලිය!