පිළිගත් පිළිතුර ගොනුවක් ගැන " Git " අමතක නොකරයි ... "( ically තිහාසිකව ). එය වර්තමාන / අනාගතයේදී ගොනුව නොසලකා හැරීමට පමණක් හේතු වේ.
මෙම ක්රමය වර්ගයන් Git සම්පූර්ණයෙන්ම අමතක නොසලකා ගොනු ( පසුගිය / වර්තමාන / අනාගත), නමුත් කරන්නේ නැහැ වැඩකරන බහලුම (දුරස්ථ සිට නැවත ඇද විට පවා) සිට delete දෙයක්.
මෙම ක්රමය භාවිතා කිරීම අවශ්ය වේ /.git/info/exclude
(කැමති) හෝ එය පෙර දැනට පවතින .gitignore
දී සියලු අමතක / නොසලකා නොහැරිය හැකි ගොනු ඇති බව අනාචාරයේ. 1
GIT ක්රියාත්මක සියලු ක්රම ඵලදායී නැවත ලිවීම් ඉතිහාසය පසු-the-ඇත්ත හැසිරීම නොසලකා හා ඒ නිසා ඇති සැලකිය යුතු ප්රතිවිපාක කෙටි කලකින් මෙම ක්රියාවලිය පසු කොපමන විය හැකි ඕනෑම මහජන / පොදු / සහයෝගී ප්රතිමිලදී සඳහා. 2
සාමාන්ය උපදෙස්: පිරිසිදු රෙපෝ එකකින් ආරම්භ කරන්න - සෑම දෙයක්ම කැපවී ඇත, වැඩ කරන නාමාවලියෙහි හෝ දර්ශකයේ කිසිවක් ඉතිරිව නැත, උපස්ථයක් සාදන්න !
එසේම, අදහස් / සංශෝධන ඉතිහාසය පිළිබඳ මෙම පිළිතුර ( හා සංශෝධන ඉතිහාසය පිළිබඳ මෙම ප්රශ්නය ) ප්රයෝජනවත් / දැනුවත් විය හැක.
#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"
#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached
#Commit to prevent working directory data loss!
#this commit will be automatically deleted by the --prune-empty flag in the following command
#this command must be run on each branch
git commit -m "ignored index"
#Apply standard git ignore behavior RETROACTIVELY to all commits from all branches (--all)
#This step WILL delete ignored files from working directory UNLESS they have been dereferenced from the index by the commit above
#This step will also delete any "empty" commits. If deliberate "empty" commits should be kept, remove --prune-empty and instead run git reset HEAD^ immediately after this command
git filter-branch --tree-filter 'git ls-files -z --ignored --exclude-standard | xargs -0 git rm -f --ignore-unmatch' --prune-empty --tag-name-filter cat -- --all
#List all still-existing files that are now ignored properly
#if this command returns nothing, it's time to restore from backup and start over
#this command must be run on each branch
git ls-files --other --ignored --exclude-standard
අවසාන වශයෙන්, පහත දැක්වෙන විධානයන් පිළිබඳ වැදගත් අනතුරු ඇඟවීම් / තොරතුරු ඇතුළත් මෙම GitHub මාර්ගෝපදේශයේ (6 වන පියවරෙන් ආරම්භ කරන්න) අනුගමනය කරන්න .
git push origin --force --all
git push origin --force --tags
git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin
git reflog expire --expire=now --all
git gc --prune=now
දැන් වෙනස් කරන ලද දුරස්ථ repo වෙතින් අදින වෙනත් devs උපස්ථයක් සාදා පසුව:
#fetch modified remote
git fetch --all
#"Pull" changes WITHOUT deleting newly-ignored files from working directory
#This will overwrite local tracked files with remote - ensure any local modifications are backed-up/stashed
git reset FETCH_HEAD
පාද සටහන්
1/.git/info/exclude
ඉහත උපදෙස් භාවිතා කරමින් සියලුම historical තිහාසික කොමිස් වලට අදාළ කළ හැකි නිසා , සමහර විට .gitignore
ගොනුවක් අවශ්ය වන commit තිහාසික බැඳීම් (ය) වෙත ලබා ගැනීම පිළිබඳ විස්තර මෙම පිළිතුරේ සීමාවෙන් ඔබ්බට විය හැකිය. මට අවශ්ය වූයේ .gitignore
මූල කැපවීම තුළ නිසි ලෙස කටයුතු කිරීමයි, එය මා කළ පළමු දෙයයි. සිට දැනුනා විය හැක /.git/info/exclude
නොතකා එහිදී එකම දෙයක් ඉටු කළ හැකි .gitignore
වන සිදු ඉතිහාසයේ පවතින අතර, එය පැහැදිලිව නැවත ලියා ඉතිහාසය යනු ඉතා පවා විට දැන, මතභේදයට තුඩු විෂය ප්රතිවිපාක කෙටි කලකින් .
FWIW, විභව ක්රම ඇතුළත් විය හැකිය git rebase
හෝ මෙම ප්රශ්නයට පිළිතුරු වැනි එක් එක් බැඳීමට බාහිරgit filter-branch
පිටපත් කරයි .gitignore
2 හුදකලා විධානයක ප්රති results ල ලබා දීමෙන් පසු සත්යය නොසලකා හැරීමේ හැසිරීම බලාත්මක කිරීම බලහත්කාරයෙන් තල්ලු කරන ලද දුරස්ථයෙන් අනාගතයේදී ඇද ගැනීමේදී git rm --cached
අලුතින් නොසලකා හරින ලද ගොනු මකාදැමීමට හේතු විය හැක . --prune-empty
පහත දැක්වෙන git filter-branch
විධානයෙහි ඇති ධජය පෙර "නොසලකා හරින ලද සියලුම ගොනු මකන්න" දර්ශකය පමණක් කැපවීම ස්වයංක්රීයව ඉවත් කිරීමෙන් මෙම ගැටළුව මඟහරවා ගනී. Git ඉතිහාසය නැවත ලිවීමෙන් බැඳීම් හැෂ් ද වෙනස් වන අතර එමඟින් අනාගත / පොදු / හවුල් / සහයෝගිතා ගබඩාවලින් සිදුවන විනාශයන් විනාශ වනු ඇත . එවැනි රෙපෝ එකකට මෙය කිරීමට පෙර කරුණාකර එහි ඇති ප්රබලතා තේරුම් ගන්න . මෙම GitHub මාර්ගෝපදේශය පහත සඳහන් දේ නියම කරයි:
ඔබේ සගයින්ට එක්ව කියන්න rebase , නෑ ඒකාබද්ධ, ඔවුන් ඔබගේ (දූෂණය) පැරණි ගබඩාව ඉතිහාසයේ ලකුණු නිර්මාණය ශාඛාවන්. එක් ඒකාබද්ධ කිරීමේ කැපවීමකින් ඔබ පිරිසිදු කිරීමේ කරදරයට ගිය අපකීර්තිමත් ඉතිහාසය නැවත හඳුන්වා දිය හැකිය.
බව විකල්ප විසඳුම් නැහැ දුරස්ථ ණයකට බලපාන වේ git update-index --assume-unchanged </path/file>
හෝ git update-index --skip-worktree <file>
සොයා ගත හැක උදාහරණ වන මෙහි .
git clean -X
සමාන බවක් පෙනේ, නමුත් මෙම තත්වය තුළ එය අදාළ නොවේ (ලිපිගොනු තවමත් Git විසින් නිරීක්ෂණය කරන විට). මම මෙය ලියන්නේ වැරදි මාර්ගයක් අනුගමනය නොකිරීමට විසඳුමක් සොයන ඕනෑම කෙනෙකුටයි.