දැනටමත් තල්ලු කර ඇති Git ටැගයක් මකා දමන්නේ කෙසේද?
දැනටමත් තල්ලු කර ඇති Git ටැගයක් මකා දමන්නේ කෙසේද?
Answers:
ඔබට දුරස්ථ ටැග් නාමයට 'හිස්' යොමු කිරීමක් අවශ්ය වේ:
git push origin :tagname
නැතහොත්, වඩාත් පැහැදිලිව, --delete
විකල්පය භාවිතා කරන්න (හෝ -d
ඔබේ git අනුවාදය 1.8.0 ට වඩා පැරණි නම්):
git push --delete origin tagname
Git ට ටැග් නාම අවකාශය සහ ශාඛා නාම අවකාශයක් ඇති බව සලකන්න, එවිට ඔබට ශාඛාවක් සඳහා සහ ටැගයක් සඳහා එකම නම භාවිතා කළ හැකිය. ටැගය වෙනුවට ඔබට ශාඛාව අහම්බෙන් ඉවත් කළ නොහැකි බවට වග බලා ගැනීමට ඔබට අවශ්ය නම්, ඔබට කිසි විටෙකත් ශාඛාවක් මකා නොදමන සම්පූර්ණ ref නියම කළ හැකිය:
git push origin :refs/tags/tagname
ඔබට දේශීය ටැගය මකා දැමීමට අවශ්ය නම්, භාවිතා කරන්න:
git tag --delete tagname
දුරස්ථ ගබඩාවකට ශාඛාවක්, ටැගයක් හෝ වෙනත් යොමු කිරීමක් තල්ලු කිරීම යනු "කුමන ගබඩාව, කුමන ප්රභවය, කුමන ගමනාන්තයද?"
git push remote-repo source-ref:destination-ref
ඔබේ ප්රධාන ශාඛාව සම්භවයක් ඇති ප්රධාන ශාඛාවට තල්ලු කරන සැබෑ ලෝක උදාහරණය:
git push origin refs/heads/master:refs/heads/master
පෙරනිමි මාර්ග නිසා, කෙටි කළ හැක්කේ:
git push origin master:master
ටැග් එකම ආකාරයකින් ක්රියා කරයි:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
ඒවා කෙටි කළ හැකි:
git push origin release-1.0:release-1.0
ප්රභව ref මඟ හැරීමෙන් (මහා බඩවැලට පෙර කොටස), ඔබ 'කිසිවක්' ගමනාන්තයට තල්ලු කරමින් දුරස්ථ කෙළවරේ ඇති ref මකා දමයි.
git push --delete origin tag1 tag2
. දේශීය ටැග් මකාදැමීම සඳහා git tag -d tag1 tag2
tag
අමුණා ඇත්තේ තනි කැපවීමකට පමණි. එම නිසා ශාඛා නාමය අදාල නොවේ.
git tag -d `git tag`
සියලු දේශීය ටැග් මකා දමනු ඇති බව දැන ගැනීමද සිත්ගන්නා කරුණකි . git push --delete origin `git tag`
ඔබ දුරස්ථ ටැග් දේශීයව ඇද ගත් බව උපකල්පනය කිරීම සඳහා ද එය අදාළ වේ . පරීක්ෂණ පරිසරයක් තුළ එය පහසු විය.
වඩාත් සරල ක්රමයක් නම්
git push --delete origin YOUR_TAG_NAME
IMO උපසර්ගය මහා බඩවැලේ සින්ටැක්ස් මෙම තත්වය තුළ ටිකක් අමුතුයි
git push --delete origin "TAGNAME"
ගත්තද:, TAGNAME යනු මුල් ටැගයේ නමයි.
tag
ටැගය ලැබීමට වග බලා ගැනීම සඳහා එම වචනය ඔබේ ටැග් නාමයට පෙර තැබිය හැකිය .
refs/tags/
: refs/tags/v2.3.1
.
v0.1.0
මකා දැමීමට ඔබට දුරස්ථ ටැගයක් තිබේ නම් සහ ඔබේ දුරස්ථය නම් origin
, සරලවම:
git push origin :refs/tags/v0.1.0
ඔබට දේශීයව ටැගය මකා දැමීමට අවශ්ය නම්:
git tag -d v0.1.0
මකාදැමීම සඳහා Git ගේ අසාමාන්ය වාක්ය ඛණ්ඩය පැහැදිලි කිරීම සඳහා ඇඩම් ෆ්රැන්කෝගේ පිළිතුර බලන්න :
.
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
...?
:tagname
දුරස්ථ මැකීම සඳහා වැඩ කළ යුතුයි.
සියලුම දේශීය ටැග් මකා දමා දුරස්ථ ටැග් ලැයිස්තුව ලබා ගන්න :
git tag -l | xargs git tag -d
git fetch
සියලුම දුරස්ථ ටැග් ඉවත් කරන්න
git tag -l | xargs -n 1 git push --delete origin
දේශීය ටැග් පිරිසිදු කරන්න
git tag -l | xargs git tag -d
දුරස්ථ ගබඩාවෙන් ටැගය ඉවත් කිරීමට:
git push --delete origin TAGNAME
ඔබට දේශීයව ටැගය මකා දැමීමට අවශ්ය විය හැකිය:
git tag -d TAGNAME
git push --delete origin TAGNAME && git tag -d TAGNAME
ඔබේ පර්යන්තයෙන් මෙය කරන්න:
git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
දැන් Github.com වෙත ගොස් නැවුම් කරන්න, ඒවා අතුරුදහන් වේ.
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
your_tag_name
දේශීය repo වෙතින් .your_tag_name
දුරස්ථ repo වෙතින් .git tag -d 12345
git push origin :refs/tags/12345
git push --delete origin tagName
git tag -d tagName
ඔබ දුරස්ථ ටැගයක් ලෙස නම් කර ඇති දුරස්ථ ශාඛාවක් තිබේ නම්, මෙම විධානයන් අපැහැදිලි බව සලකන්න.
git push origin :tagname
git push --delete origin tagname
ටැගය මකා දැමීමට ඔබ මෙම විධානය භාවිතා කළ යුතුය:
git push origin :refs/tags/<tag>
ශාඛාව මකා දැමීමට මෙයයි:
git push origin :refs/heads/<branch>
එසේ නොවේ නම්, ඔබට මෙවැනි දෝෂයක් ලැබෙනු ඇත:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
ටැග් 11,000 කට වඩා මකා දැමීමට අවශ්ය වන අතරතුර මෙම පිළිතුරු කියවීමෙන් පසු xargs
, ඔබට පිළිස්සීමට පැය ගණනක් නොමැති නම්, මෙම ක්රම රඳා පැවතීම හෝ බොහෝ කාලයක් ගත වන බව මම ඉගෙන ගතිමි .
අරගලය, මම වඩා වේගවත් ක්රම දෙකක් සොයා ගත්තා . යන දෙකම සඳහා, ආරම්භ git tag
හෝ git ls-remote --tags
ඔබට දුරස්ථ මත මැකීමට අවශ්ය ටැග් ලැයිස්තුවක් කරන්න. පහත උදාහරණ වලදී ඔබට අතහැර දැමීමට හෝ ප්රතිස්ථාපනය කිරීමට හැකියsorting_proccessing_etc
ඕනෑම grep
ඉංග්රීසි, sort
ඉන්ග්, tail
ඉන්ග් හෝ head
ඉන්ග් ( උදා: grep -P "my_regex" | sort | head -n -200
ආදිය ) .
xargs
අවම වශයෙන් ටැග් දහස් ගණනක් සමඟ ක්රියා කරයි .git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
කොහොමද මේ වැඩ කරන්නේ? සාමාන්ය, රේඛාවෙන් වෙන් කරන ලද ටැග් ලැයිස්තුව අවකාශය වෙන් කළ ටැගයන්ගේ තනි පේළියකට පරිවර්තනය කරනු ලැබේ :
. . .
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
git push
මෙම ආකෘති ටැගය සමඟ භාවිතා කිරීම සෑම දුරස්ථ ref එකකටම කිසිවක් තල්ලු නොකරයි , එය මකා දමයි (මේ ආකාරයට තල්ලු කිරීමේ සාමාන්ය ආකෘතිය එයයිlocal_ref_path:remote_ref_path
).
මෙම ක්රම දෙකටම පසුව, ඔබේ දේශීය ටැග් ද මකා දැමීමට ඔබට අවශ්ය වනු ඇත. මෙය වඩා වේගවත් බැවින් අපට නැවත භාවිතයට යා හැකියxargs
හා git tag -d
ප්රමාණවත් වන.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
හෝ දුරස්ථ මකාදැමීමට සමාන:
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
ඔබ SourceTree - විශිෂ්ට Git GUI භාවිතා කරන්නේ නම්, පහත දැක්වෙන දේ කිරීමෙන් විධාන රේඛාවකින් තොරව ඔබට පහසුවෙන් මෙය කළ හැකිය:
YOUR_TAG_NAME දැන් ඔබේ දේශීය ගබඩාවෙන් සහ සියලු දුරස්ථ වලින් ඉවත් කරනු ලැබේ - එය GitHub, BitBucket හෝ වෙනත් ඕනෑම තැනක එම ගබඩාව සඳහා දුරස්ථයක් ලෙස ලැයිස්තුගත කර ඇත.
එසේම, ඔබ දේශීයව ටැගයක් මකා දැමුවද දුරස්ථ මූලාරම්භයේ නොව, ඔබට එය සෑම තැනකම මකා දැමීමට අවශ්ය නම්, එකම නමක් ඇති නව ටැගයක් සාදන්න. ඉන්පසු, සෑම තැනකම මකා දැමීමට ඉහත පියවර නැවත කරන්න.
ඔබ release01
Git ගබඩාවක නමින් ටැගයක් නිර්මාණය කර ඇත්නම් , පහත සඳහන් දෑ කිරීමෙන් ඔබ එය ඔබේ ගබඩාවෙන් ඉවත් කරනු ඇත:
git tag -d release01
git push origin :refs/tags/release01
රසදිය ගබඩාවකින් එකක් ඉවත් කිරීමට:
hg tag --remove featurefoo
කරුණාකර https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
ඔබ පවර්ෂෙල් භාවිතා කරන්නේ නම්, ඔබට ඒවායින් කිහිපයක් මකා දැමීමට අවශ්ය නම්:
# Local tags:
git tag -l | foreach { git tag -d $_ }
# Remote tags:
git tag -l | foreach { git push --delete origin $_ }
ඇත්ත වශයෙන්ම, මකා දැමීමට පෙර ඔබට ඒවා පෙරහන් කළ හැකිය:
git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
Ub කියුබන්එක්ස් යෝජනා කළ පරිදි, මම මෙම පිළිතුර මගේ මුල් පිටපතෙන් බෙදුවෙමි:
xargs
කරකැවීම සමඟ තවත් බොහෝ දේ පරිමාණය කළ හැකිය. එය පුද්ගලික ප්රවේශ ටෝකනයක් වන ගිතුබ් ඒපීඅයි භාවිතා කරන අතර උපයෝගීතාව උත්තේජනය කරයි parallel
.git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\" \
-H \"cache-control: no-cache\"`
parallel
බොහෝ මෙහෙයුම් මාතයන් ඇත, නමුත් සාමාන්යයෙන් ඔබ ලබා දෙන ඕනෑම විධානයකට සමාන්තරව ක්රියා කරන අතර ක්රියාවලි ගණනට සීමාවන් නියම කිරීමට ඔබට ඉඩ සලසයි. --jobs 2
වේගවත් ක්රියාකාරිත්වයට ඉඩ දීම සඳහා ඔබට පරාමිතිය වෙනස් කළ හැකිය , නමුත් ගිතුබ්ගේ අනුපාත සීමාවන් සමඟ මට ගැටලු ඇති අතර ඒවා දැනට පැයට 5000 / පැයක් වන අතර ලේඛනගත නොකළ කෙටි කාලීන සීමාවක් ද ඇති බව පෙනේ.
මෙයින් පසු, ඔබේ දේශීය ටැග් ද මකා දැමීමට ඔබට අවශ්ය වනු ඇත. අපි භාවිතා ආපසු යන්න පුළුවන් නිසා මේ තරම් වේගවත් වේ xargs
හා git tag -d
ප්රමාණවත් වන.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
අනෙක් පිළිතුරු මඟින් මෙය සිදු කරන්නේ කෙසේදැයි පෙන්වා දෙයි, නමුත් මෙය දුරස්ථ ගබඩාවක් බැවින් ඔබ එහි ප්රතිවිපාක මතක තබා ගත යුතුය.
On Retagging කොටසේ ඇති git tag man පිටුවේ, වෙනස පිළිබඳව දුරස්ථ repo හි අනෙකුත් පරිශීලකයින්ට ආචාරශීලීව දැනුම් දෙන්නේ කෙසේද යන්න පිළිබඳ හොඳ පැහැදිලි කිරීමක් ඇත. ඔබේ වෙනස්කම් අන් අය ලබා ගත යුතු ආකාරය සන්නිවේදනය කිරීම සඳහා ඔවුන් ඉතා හොඳ නිවේදන අච්චුවක් පවා ලබා දේ.
නිෂ්පාදන ටැගවල පසුගිය මාස කිහිපය හැර අනෙක් සියල්ල මකා දැමිය හැකි වන පරිදි රටාවකට ගැලපෙන ඒවා හැර අනෙක් සියලුම ටැග් ඉවත් කිරීමට මට අවශ්ය විය, මෙන්න මම විශාල සාර්ථකත්වයක් සඳහා භාවිතා කළ දේ:
සියලුම දුරස්ථ ටැග් මකන්න සහ ප්රකාශනයෙන් මකා දමන්න
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin
සියලුම දේශීය ටැග් මකන්න සහ ප්රකාශනයෙන් මකා දමන්න
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
දේශීය සහ ආරම්භක ස්ථාන වලින් ලබා දී ඇති ටැගය ඉවත් කිරීමට සරල ස්ක්රිප්ට්. ටැගය සැබවින්ම තිබේදැයි පරීක්ෂා කිරීම සමඟ.
if [ $(git tag -l "$1") ]; then
git tag --delete $1
git push --delete origin $1
echo done.
else
echo tag named "$1" was not found
fi
භාවිතා කරන්නේ කෙසේද:
$> git-tag-purge.sh tag_name)
xargs
දැනටමත් කරන දෙයක් සඳහා විශාල වැඩ කොටසක් සේ පෙනේ . මෙම ත්රෙඩ් එක දෙස ආපසු හැරී බලන විට, xargs
ඔබ අත්විඳින ලද මන්දගාමී බව මම අනුමාන කරන්නේ එයට මුල් පිළිතුර xargs -n 1
සැබවින්ම අවශ්ය නොවන විට භාවිතා කළ බැවිනි.
xargs
උපරිම විධාන රේඛා දිග සමඟ ස්වයංක්රීයව කටයුතු කිරීම හැර මෙය ඔබේ ක්රමයට සමාන වේ:
git tag | sorting_processing_etc | xargs git push --delete origin
xargs
ක්රියාවලි සමාන්තරව ද ක්රියාත්මක කළ හැකිය. ක්රමය 2 සමඟ xargs
:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
ඉහත එක් එක් ක්රියාවලිය තුළ උපරිම තර්ක 100 ක් හැසිරවීමට උපරිම ක්රියාවලි 5 ක් භාවිතා කරයි. ඔබේ අවශ්යතා සඳහා වඩාත්ම සුදුසු දේ සොයා ගැනීමට ඔබට තර්ක සමඟ අත්හදා බැලිය හැකිය.
ඔබට # අක්ෂරයෙන් ආරම්භ කර ඇති ටැගයක් තිබේ නම් , උදා #ST002
, සාමාන්ය රටා භාවිතයෙන් ඔබට මකා දැමිය නොහැකි බව ඔබට පෙනී යනු ඇත. එනම්
git tag -d #STOO2
මෙම ටැගය ඉවත් වන්නේ නැත, නමුත් එය ඔතන සංගීත පැවැ එසේ වැනි
git tag -d "#ST002" or git tag -d '#ST002'
එය මකා දැමෙනු ඇත. ටැග් නම් ලිවීමට # භාවිතා කිරීමේ වැරැද්ද කළ කෙනෙකුට එය බලාපොරොත්තු වේ.
දුරස්ථයක් සමඟ පටලවා නොගෙන එය දේශීයව පරීක්ෂා කිරීම සඳහා දේශීය ටෙස්ට්කේස් එකක් මෙන්න:
~/p $ mkdir gittest
~/p/git $ cd gittest/
~/p/gittest $ git init
Initialized empty Git repository in /Users/local_user/p/gittest/.git/
~/p/gittest $ touch testfile.txt
~/p/gittest $ git add testfile.txt
~/p/gittest $ git commit -m "initial commit"
[master (root-commit) 912ce0e] initial commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testfile.txt
~/p/gittest $ git tag
~/p/gittest $ git tag -a testtag
~/p/gittest $ git tag
testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ cd ..
~/p $ mkdir gitbare
~/p $ cd gitbare
~/p/gitbare $ git init --bare
Initialized empty Git repository in /Users/local_user/p/gitbare/
~/p/gitbare $ cd ..
~/p $ cd gittest/
~/p/gittest $ git remote add origin /Users/local_user/p/gitbare
~/p/gittest $ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
~/p/gittest $ git push origin testtag
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new tag] testtag -> testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ git push -d origin testtag
To /Users/local_user/p/gitbare
- [deleted] testtag
~/p/gittest git tag -d testtag
Deleted tag 'testtag' (was b0a6c15)
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
~/p/gittest
හායිට අවශ්ය වූයේ මා විසින් නිර්මාණය කරන ලද අන්වර්ථ නාමයක් බෙදා ගැනීමටයි.
ඔබගේ ~ / .gitconfig වෙත පහත සඳහන් දෑ එක් කරන්න
[alias]
delete-tag = "!f() { \
echo 'deleting tag' $1 'from remote/origin ausing command: git push --delete origin tagName;'; \
git push --delete origin $1; \
echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
git tag -d $1; \
}; f"
භාවිතය පෙනේ:
-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/origin ausing command: git push --delete origin tagName;
To https://github.com/jsticha/pafs
- [deleted] v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)