ලුහුබැඳ ඇති නමුත් දැන් .gitignore හි ඇති ගොනුවක් ගැන Git “අමතක” කරන්නේ කෙසේද?


5407

ලුහුබඳිමින් සිටි ගොනුවක් ඇත git, නමුත් දැන් ගොනුව .gitignoreලැයිස්තුවේ ඇත.

කෙසේ වෙතත්, එම ගොනුව git statusසංස්කරණය කිරීමෙන් පසුව එය දිගටම පෙන්වයි . gitඑය සම්පූර්ණයෙන්ම අමතක කිරීමට ඔබ බල කරන්නේ කෙසේද ?


16
git clean -Xසමාන බවක් පෙනේ, නමුත් මෙම තත්වය තුළ එය අදාළ නොවේ (ලිපිගොනු තවමත් Git විසින් නිරීක්ෂණය කරන විට). මම මෙය ලියන්නේ වැරදි මාර්ගයක් අනුගමනය නොකිරීමට විසඳුමක් සොයන ඕනෑම කෙනෙකුටයි.
imz - අයිවන් සකරියාෂෙව්

35
මේ සඳහා ඇති එකම සැබෑ පිළිතුර පහතින්, බලන්න git update-index --assume-unchanged. මෙම විසඳුම 1) ගොනුව සේවාදායකයේ තබා ඇත (දර්ශකය), 2) එය දේශීයව නිදහසේ වෙනස් කිරීමට ඔබට ඉඩ සලසයි.
Qwerty

8
ඔබ භාවිතා කිරීමට අවශ්ය --skip-worktree, බලන්න: stackoverflow.com/questions/13630849/...
Doppelganger

77
වැදගත් ප්‍රශ්නයක් නම්: ගොනුව ගබඩාවේ පැවතිය යුතුද නැද්ද? උදා: යමෙකු නව ගබඩාව ක්ලෝන කරන්නේ නම්, ඔවුන් ගොනුව ලබා ගත යුතුද නැද්ද? නම් ඔව් නම් git update-index --assume-unchanged <file>නිවැරදි වන අතර ගොනු නිධිය තුල පවතිනු ඇත සහ වෙනස්කම් සමග එකතු කළ නොහැකි වනු ඇත git add. නම් නැත (උදාහරණයක් සමහර හැඹිලි ගොනු, ජනනය ගොනු ආදිය විය), එසේ නම් git rm --cached <file>ගබඩාව සිට එය ඉවත් කරයි.
මාටින්

9
Ar මාටින් @ ක්වර්ටි සෑම කෙනෙකුම --assume-unchangedවිශාල ලුහුබැඳ ඇති ලිපිගොනු වල තත්වය පරීක්ෂා කිරීම සඳහා git වැළැක්වීම සඳහා කාර්ය සාධනය සඳහා උපදෙස් දීම නැවැත්විය යුතු නමුත් --skip-worktreeපරිශීලකයා තවදුරටත් කැප කිරීමට අකමැති නවීකරණය කරන ලද ලුහුබැඳ ඇති ලිපිගොනු සඳහා වැඩි කැමැත්තක් දක්වයි . Stackoverflow.com/questions/13630849/…
පිලිප්

Answers:


5711

.gitignoreadd -fgit විසින් ලුහුබැඳ ඇති ලිපිගොනු සමූහයට (අ නොමැතිව ) එකතු නොකිරීම වළක්වනු ඇත , කෙසේ වෙතත් git විසින් දැනටමත් ලුහුබැඳ ඇති ඕනෑම ලිපිගොනු ලුහුබැඳීම දිගටම කරගෙන යනු ඇත.

ගොනුවක් ලුහුබැඳීම නැවැත්වීමට ඔබ එය දර්ශකයෙන් ඉවත් කළ යුතුය. මෙම විධානය මඟින් මෙය සාක්ෂාත් කරගත හැකිය.

git rm --cached <file>

ඔබට සම්පූර්ණ ෆෝල්ඩරයක් ඉවත් කිරීමට අවශ්‍ය නම්, එහි ඇති සියලුම ලිපිගොනු නැවත නැවත ඉවත් කළ යුතුය.

git rm -r --cached <folder>

ප්‍රධාන සංශෝධනයෙන් ගොනුව ඉවත් කිරීම ඊළඟ බැඳීම මත සිදුවනු ඇත.

අවවාදයයි: මෙය ඔබේ දේශීය වෙතින් භෞතික ගොනුව ඉවත් නොකරන අතර, එය ඊළඟට වෙනත් සංවර්ධක යන්ත්‍ර වලින් ගොනු ඉවත් කරනු ඇත git pull.


55
මා වෙනුවෙන් ක්‍රියා කළ ක්‍රියාවලිය 1. පළමුව අපේක්ෂිත වෙනස්කම් සිදු කිරීම 2. git rm --cached <file> සහ නැවත කැපවීම 3. ගොනුව .gitignore වෙත එක් කරන්න, git තත්ත්වය පරීක්ෂා කර නැවත කැප වන්න
mataal

117
ඉතා වැදගත් එකතු කිරීම. නොසලකා හරින ලද ගොනුව වෙනස් කරනු ලැබේ නම් (නමුත් එසේ තිබියදීත් එය සිදු නොවිය යුතුය), වෙනස් කිරීමෙන් හා ක්‍රියාත්මක කිරීමෙන් පසු git add .එය දර්ශකයට එකතු වේ. ඊළඟ කැපවීම එය ගබඩාවට කැප කරනු ඇත. මෙම ක්‍රියාත්මක කිරීම වළක්වා ගැනීම සඳහා තවත් එක් විධානයක් මාතාල් පැවසූ වහාම:git update-index --assume-unchanged <path&filename>
ඩාවෝ

32
K අකිරියාමමොටෝගේ ක්‍රමය මටත් හොඳින් ක්‍රියාත්මක විය. මගේ ගබඩාවේ ලිපිගොනු දහස් ගණනක් ඇති බැවින් මම ප්‍රතිදානය යටපත් කළෙමි:git rm -r -q --cached .
ආරොන් බ්ලෙන්කුෂ්

85
මෙය ගොනුව මකා දමනු ඇත git pull.
පීටර් පෙලර්

22
git rm --cached <file> ගබඩාවෙන් ගොනුව ඉවත් කරන්න, git update-index --assume-unchanged <file> ගොනුව අස්ථායි වෙනස්කම් වල නොපෙන්වන අතර නව වෙනස්කම් සිදු නොකරයි. නමුත් මට අවශ්‍යයි GIT JUST IGNORE CONTENT OF FILE PLEEEEEASE
Igor Semin

2614

පහත දැක්වෙන විධාන මාලාව මඟින් Git දර්ශකයෙන් (වැඩකරන නාමාවලියෙන් හෝ දේශීය repo වෙතින් නොවේ) සියලුම අයිතම ඉවත් කරනු ඇත, පසුව Git නොසලකා හැරීමට ගරු කරන අතරම Git දර්ශකය යාවත්කාලීන කරයි. පීඑස්. දර්ශකය = හැඹිලිය

පලමු:

git rm -r --cached . 
git add .

ඉන්පසු:

git commit -am "Remove ignored files"

හෝ එක් ලයිනර්:

git rm -r --cached . && git add . && git commit -am "Remove ignored files"

198
මෙම පිළිතුර සහ පිළිගත් පිළිතුර අතර වෙනස ඉස්මතු කිරීමට: මෙම විධානයන් භාවිතා කිරීමෙන් ඔබට බලපෑමට ලක්වූ ලිපිගොනු දැන ගැනීමට අවශ්‍ය නොවේ. (දර්ශකයෙන් ඉවත් කළ යුතු අහඹු ලිපිගොනු රාශියක් ඇති තාවකාලික ඩර් එකක් ගැන සිතන්න).
ලුඩ්විග්

53
පිළිගත් පිළිතුරට සමානය. ලිපිගොනු මකා දැමෙනු ඇත git pull.
පීටර් පෙලර්

73
මෙය සම්මත git විධානයක් ලෙස තිබීම සතුටක්. වගේ දෙයක් git rmignored.
බෙරික්

12
ud ගුඩිං -ආර් යනු “පුනරාවර්තන” යන්නයි
මාර්ක්

14
මේ සමඟ ඔබට දැනට නොමැති වෙනත් නිෂ් less ල ලිපිගොනු එකතු කිරීම අවසන් විය හැකිය .gitignore. git statusමෙම විධානයෙන් පසු ඔබේ ශබ්දය කොතරම්ද යන්න සොයා ගැනීමට අපහසු විය හැකිය . අලුතින් නොසලකා හරින ලද ගොනු පමණක් ඉවත් කරන විධානයක් වඩා හොඳ වනු ඇත. ඒ නිසා තමයි මම කැමතියි සොෆ්ට්ගේ පිළිතුරට
කුර්සෙඩ් මෙටල්

1124

git update-index මට වැඩ කරයි:

git update-index --assume-unchanged <file>

සටහන: මෙම විසඳුම ඇත්ත වශයෙන්ම ස්වාධීන වන්නේ .gitignoregitignore සොයා නොගත් ලිපිගොනු සඳහා පමණි.

සංස්කරණය කරන්න: මෙම පිළිතුර පළ කරන ලද බැවින්, නව විකල්පයක් නිර්මාණය කර ඇති අතර එය වඩාත් සුදුසු විය යුතුය. --skip-worktreeපරිශීලකයා තවදුරටත් කැප කිරීමට අකමැති නවීකරණය කරන ලද ලුහුබැඳ ඇති ලිපිගොනු සඳහා ඔබ භාවිතා කළ යුතු අතර --assume-unchangedවිශාල ලුහුබැඳ ඇති ලිපිගොනු වල තත්වය පරීක්ෂා කිරීම සඳහා git වැළැක්වීම සඳහා කාර්ය සාධනය සඳහා තබා ගන්න . වැඩි විස්තර සඳහා https://stackoverflow.com/a/13631525/717372 බලන්න ...

git update-index --skip-worktree <file>

173
මෙම IS සැබෑ පිළිතුර. නියමයි, ඉතා සරලයි, දූෂණය නොවන git statusඅතර ඇත්ත වශයෙන්ම ඉතා බුද්ධිමත් ය. ස්තූතියි.
පැබ්ලෝ ඔල්මොස් ද ඇගිලේරා සී.

4
rm [...] .අවම වශයෙන් එය ක්‍රියාත්මක වන ආකාරය මට දැනගත හැකි බැවින් මම හොඳ විසඳුමක් සඳහා ගියෙමි . කළ යුතු update-indexහා කළ --assume-unchangedයුතු දේ පිළිබඳ විශාල ලියකියවිලි මට හමු නොවීය . නොසලකා හරින ලද සියලුම ලිපිගොනු ඉවත් කිරීමට මා කැමති නිසා මෙය අනෙකට සංසන්දනය කරන ආකාරය කිසිවෙකුට එකතු කළ හැකිද? (නැතහොත් පැහැදිලි පැහැදිලි කිරීමක් සඳහා සබැඳියක්ද?)
බ්‍රැඩි ට්‍රේනර්

25
git update-index --assume-unchanged <path> …නොසලකා, නිශ්චිත මාර්ග (ය) වල වෙනස්කම් නොසලකා හැරීමට git හේතු වේ .gitignore. ඔබ දුරස්ථයකින් අදින්නේ නම් සහ එම දුරස්ථයට මෙම මාර්ගයේ වෙනස්කම් තිබේ නම්, ගැටුම සමඟ ඒකාබද්ධ කිරීම git අසමත් වන අතර ඔබට අතින් ඒකාබද්ධ වීමට අවශ්‍ය වනු ඇත. git rm --cached <path> …එම මාර්ගය ලුහුබැඳීම නැවැත්වීමට git හේතු වේ. ඔබ මාර්ගය එකතු නොකළහොත් .gitignoreඅනාගතයේදී මාර්ගය පෙනෙනු ඇත git status. පළමු විකල්පය git commit ඉතිහාසයේ අඩු ශබ්දයක් ඇති අතර "නොසලකා හරින ලද" ගොනුවේ වෙනස්කම් අනාගතයේදී බෙදා හැරීමට ඉඩ දෙයි.
ManicDee

26
මෙය පිළිගත් පිළිතුර නොවන්නේ කෙසේද යන්න පිළිබඳව මම තරමක් ව්‍යාකූල වී සිටිමි. මෙහි පිළිගත් පිළිතුර පැහැදිලිවම අසනු ලබන සත්‍ය ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත. මෙම පිළිතුර නිධිය තුළ ඇති ගොනුවේ වෙනස්කම් නොසලකා හරින අතර එය ගබඩාවෙන් ඉවත් නොකරයි.
ඩේව් කූපර්

11
දී ඇති විධානය හරියටම කරන්නේ කුමක්ද යන්න පැහැදිලි කරන්නේ නම් මෙම පිළිතුර වඩාත් ප්‍රයෝජනවත් වනු ඇත, උදා: එය යෝජිත අනෙක් විසඳුම් වලට වඩා වෙනස් වන්නේ කෙසේද.
LarsH

283
git ls-files --ignored --exclude-standard -z | xargs -0 git rm --cached
git commit -am "Remove ignored files"

මෙය නොසලකා හරින ලද ගොනු ලැයිස්තුවක් ගෙන ඒවා දර්ශකයෙන් ඉවත් කර වෙනස්කම් සිදු කරයි.


7
ඔබට ඒවා වැඩ කරන නාමාවලියෙන් ඉවත් කිරීමට අවශ්‍ය නම්, දුවන්න git ls-files --ignored --exclude-standard | xargs git rm . මෙම පිළිතුර හොඳම යැයි මම විශ්වාස කරමි! මන්ද එය ඉතා පැහැදිළි, යුනික්ස්-මාර්ගයක් වන අතර, වෙනත්, වඩාත් සංකීර්ණ විධානයන්හි අතුරු ආබාධ රචනා නොකර, අවශ්‍ය දේ සෘජුව සිදු කරයි.
imz - අයිවන් සකරියාෂෙව්

6
විශිෂ්ට පිළිතුර; කෙසේ වෙතත්, ඔබට මැද අවකාශයන් සහිත මාර්ග තිබේ නම් විධානය අසාර්ථක වනු ඇත, උදා: "My dir / my_ignored_file.txt"
ඩේවිඩ් හර්නාන්ඩස්

8
git ls-files --ignored --exclude-standard | sed 's /.*/"&"/' | xargs git rm --cached
ඩේවිඩ් හර්නාන්ඩස්

3
git rmls-filesකිසිවක් නොගැලපේ නම් පැමිණිලි කරනු ඇත . ලිපිගොනු නොගැලපේ නම් ධාවනය නොකරන xargs -r git rm ...ලෙස පැවසීමට භාවිතා කරන්න . xargsgit rm
වුල්ෆ්ගැන්ග්

10
බෙදුම්කරු ලෙස \ 0 භාවිතා කිරීම වඩා හොඳය:git ls-files --ignored --exclude-standard -z|xargs -0 git rm --cached
නිල්ස්-ඕ-මැට්

83

හඳුනා නොගත් ලිපිගොනු ඉවත් කිරීමට මම සෑම විටම මෙම විධානය භාවිතා කරමි. එක් පේළියක්, යුනික්ස් විලාසිතාව, පිරිසිදු ප්‍රතිදානය:

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

එය ඔබගේ නොසලකා හරින ලද සියලුම ලිපිගොනු ලැයිස්තුගත කරයි, සෑම නිමැවුම් රේඛාවක්ම උපුටා ගත් රේඛාවක් වෙනුවට ආදේශ git rm -r --cachedකරන්න.


3
විශිෂ්ට විසඳුමක්! සියළුම ලිපිගොනු ඉවත් කර නැවත ඒවා ඇතුලත් කිරීම වඩාත් නිවැරදිව දැනේ.
ජෝන් කැට්මුල්

5
මමත් මේ "පිරිසිදු" බව සොයාගත්තා. එය පැහැදිලිව පෙනෙන නමුත් පළමු කොටස ධාවනය කිරීමෙන්, ඔබ ඉදිරියට ගොස් අවසන් ක්‍රියාවට නැංවීමට පෙර, git ls-files --ignored --exclude-standardඔබගේ නව ලිපිගොනු .gitignoreබැහැර කිරීමට / ඉවත් කිරීමට යන්නේ කුමන ගොනු දැයි මුලින්ම තේරුම් ගැනීමට / සත්‍යාපනය කිරීමට ඉඩ දෙයි git rm.
ජෝන්බ්‍රේව්

සැලකිලිමත් වන්න, ඒවායේ සමහර "නපුරු" අක්ෂර සහිත ගොනු නාමයන් අසමත් වේ, උදා \n. මේ සඳහා මගේ විසඳුම පළ කර ඇත.
ජෝන් බ්රේව්

3
තවත් අවවාදයක්: අදින්න, මෙය අනෙක් අයගේ වැඩ කරන නාමාවලිවල ගොනුව මකා දැමීමට හේතු වනු ඇත, නේද?
LarsH

උත්සාහ කළ නමුත් මා වෙනුවෙන් වැඩ කළේ නැත: sed: 1: "s/.*/": unterminated substitute in regular expressionඅවකාශයන් සහිත repo එකක පෙරහන් ශාඛා විධානයක. (පෙරහන් ශාඛාවෙන් පිටත වැඩ කරන බව පෙනේ). මම භාවිතා git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cachedසිට @ JonBrave ගේ පිළිතුර වෙනුවට.
ගොෆොලොජි

71

එය පිටතට ගෙනයන්න, කැපවන්න, පසුව එය නැවත ඇතුළට ගෙන යන්න. මෙය අතීතයේ මට වැඩ කර ඇත. මෙය ඉටු කිරීම සඳහා බොහෝ විට 'ගිටාර්' ක්‍රමයක් තිබේ.


2
කලින් නොසලකා හරින ලද ගොනු සමූහයක් නොසලකා හැරීමට ඔබට අවශ්‍ය නම් මෙය ඉතා හොඳය. ඔබ කීවාක් මෙන්, මේ සඳහා වඩා හොඳ ක්‍රමයක් තිබිය හැකිය.
ඔස්කාර් පර්සන්

මෙය හරියටම මම කළ දෙයයි. ගොනු git ට පිටතින් ඇති ෆෝල්ඩරයකට ගෙනයන්න, ඉන්පසු "git add.", "Git commit" කරන්න. . සැ.යු: GIT වෙතින් ලිපිගොනු මකාදැමූ බව පෙනේ, එබැවින් ඉහත විසඳුම්වල සඳහන් කර ඇති පරිදි ඒවා වෙනත් පිරික්සුම් / ඇදීම් වලින් ඉවත් කරනු ඇත, නමුත් ඔබ මුලින් ඒවායේ පිටපත් සාදන බැවින් මෙය IMHO හි ගැටළුවක් නොවේ. කණ්ඩායමේ සෙසු අයට දන්වන්න ...
ඩෙල්

වැරදි ලෙස කැපවූ ෆෝල්ඩර ඉවත් කිරීමට පහසුම ක්‍රමය මෙයයි.
මාර්ට්ලාර්ක්

2
මට පෙනෙන එකම මාර්ගය බව පෙනේ. .Gitignore වෙත ඔබ ගොනුවක් / ෆෝල්ඩරයක් එක් කළ විගසම එය එම දෝෂය නොසලකා හරිනු නොලැබේ. එය සදාකාලිකවම - සෑම තැනකම.
ජෝශප් කේ

මෙය ක්‍රියාත්මක වූයේ මා ඒවා එකතු කිරීමෙන් පසුවය. පසුව ඒවා .gitignore
hanzolo

66

ඔබට git rmලුහුබැඳ ගිය ගොනුවක් වෙනත් පුද්ගලයින්ට අවශ්‍ය විය හැකි නම් (අනතුරු ඇඟවීම, ඔබ git rm --cached වෙනත් කෙනෙකුට මෙම වෙනස ලැබුනත්, ඔවුන්ගේ ගොනු ඔවුන්ගේ ගොනු පද්ධතියේ මැකෙනු ඇත). මේවා බොහෝ විට සිදු කරනුයේ වින්‍යාස ගොනු අභිබවා යාම, සත්‍යාපන අක්තපත්‍ර යනාදිය හේතුවෙනි. කරුණාකර https://gist.github.com/1423106 බලන්න .

සාරාංශ ගත කිරීමට:

  • ඔබගේ යෙදුම නොසලකා හරින ලද config-overide.ini ගොනුවක් සොයන්න සහ කැපවූ ගොනුව config.ini හරහා භාවිතා කරන්න (හෝ විකල්පයක් ලෙස ~ / .config / myapp.ini හෝ $ MYCONFIGFILE සඳහා බලන්න)
  • Config-sample.ini ගොනුව කැප කර config.ini ගොනුව නොසලකා හරින්න, ස්ක්‍රිප්ට් එකක් හෝ අවශ්‍ය නම් ගොනුව අවශ්‍ය පරිදි පිටපත් කරන්න.
  • ඔබ සඳහා වන වෙනස්කම් යෙදීමට සහ ඉවත් කිරීමට gitattributes clean / smudge magic භාවිතා කිරීමට උත්සාහ කරන්න, නිදසුනක් ලෙස වින්‍යාස ගොනුව විකල්ප ශාඛාවකින් පිටවීමක් ලෙස විග්‍රහ කර HEAD වෙතින් පිටවීමක් ලෙස වින්‍යාස ගොනුව පිරිසිදු කරන්න. මෙය උපක්‍රමශීලී දෙයක්, නවක පරිශීලකයා සඳහා මම එය නිර්දේශ නොකරමි.
  • වින්‍යාස ගොනුව කිසි විටෙකත් මාස්ටර් සමඟ ඒකාබද්ධ නොවන විහිදුණු ශාඛාවක තබා ගන්න. ඔබට යෙදවීමට / සම්පාදනය කිරීමට / පරීක්ෂා කිරීමට අවශ්‍ය වූ විට ඔබ එම ශාඛාවට ඒකාබද්ධ වී එම ගොනුව ලබා ගන්න. මානව ඒකාබද්ධ කිරීමේ ප්‍රතිපත්ති සහ අතිරේක-මොඩියුල මොඩියුල භාවිතා කිරීම හැර මෙය අත්‍යවශ්‍යයෙන්ම දුම් / පිරිසිදු ප්‍රවේශය වේ.
  • ප්‍රති-නිර්දේශ කිරීම: උපකල්පනය නොවෙනස්ව භාවිතා නොකරන්න, එය අවසන් වන්නේ කඳුළු වලින් පමණි (මක්නිසාද යත්, තමාටම බොරු කීම නරක දේ සිදුවීමට හේතු වනු ඇත, ඔබේ වෙනස සදහටම නැති වී යන ආකාරයට).

7
ගොනුව මකාදැමීමේදී අපිරිසිදු නම් git එය ඉවත් නොකරයි. එය අපිරිසිදු නොවේ නම්, ගොනුව ලබා ගැනීම තරම් පහසු වනු ඇත git checkout <oldref> -- <filename>- නමුත් එය පරීක්ෂා කර නොසලකා හරිනු ඇත.
amenthes

ඔබගේ අවසාන සටහන සම්බන්ධයෙන් (ගැන --assume-unchanged): එක්කෝ මෙය භාණ්ඩ ප්‍රවාහනය වන අතර එය බැහැර කළ යුතුය, නැතහොත් ඔබට (මට ඒත්තු ගැන්වී ඇති) හේතුව පැහැදිලි කළ හැකි අතර එය ප්‍රයෝජනවත් වේ.
රොමේන් වලරි

58

මෙය භාවිතා කරන්න:

1. ඔබට ලිපිගොනු ගොඩක් ඉවත් කිරීමට අවශ්‍යයි, හෝ

2. ඔබ ඔබේ gitignore ගොනුව යාවත්කාලීන කළේය

මූලාශ්‍ර සබැඳිය: http://www.codeblocq.com/2016/01/Untrack-files-already-added-to-git-repository-based-on-gitignore/

ඔබගේ git ගබඩාවට ඔබ දැනටමත් ලිපිගොනු කිහිපයක් එකතු කර ඇති බව කියමු. ඉන්පසු ඒවා ඔබේ .gitignore වෙත එක් කරන්න; මෙම ලිපිගොනු ඔබගේ ගබඩාවේ දර්ශකයේ තවමත් පවතී. ඒවායින් මිදෙන්නේ කෙසේදැයි මෙම ලිපියෙන් අපි බලමු.

පියවර 1: ඔබගේ සියලු වෙනස්කම් කරන්න

ඉදිරියට යාමට පෙර, ඔබගේ .gitignore ගොනුව ඇතුළුව ඔබගේ සියලු වෙනස්කම් සිදු කර ඇති බවට වග බලා ගන්න.

පියවර 2: නිධියෙන් සියල්ල ඉවත් කරන්න

ඔබේ repo ඉවත් කිරීමට, භාවිතා කරන්න:

git rm -r --cached .
  • rm යනු ඉවත් කිරීමේ විධානයයි
  • -r මඟින් පුනරාවර්තන ඉවත් කිරීමට ඉඩ දෙනු ඇත
  • -කැච් මඟින් දර්ශකයෙන් ගොනු ඉවත් කරනු ඇත. ඔබගේ ලිපිගොනු තවමත් පවතී.

මෙම rmවිධානය සමාව විය හැක. එය කලින් කරන දේ උත්සාහ කිරීමට ඔබට අවශ්‍ය නම්, දේවල් පරීක්ෂා කිරීමට -nහෝ --dry-runධජය එක් කරන්න .

පියවර 3: සියල්ල නැවත එකතු කරන්න

git add .

පියවර 4: කැප වන්න

git commit -m ".gitignore fix"

ඔබේ ගබඩාව පිරිසිදුයි :)

එහි effective ලදායී වෙනස්කම් දැකීමට ඔබගේ දුරස්ථයට වෙනස්කම් තල්ලු කරන්න.


1
එය දුරස්ථ ගබඩාවෙන් ගොනු මකා නොදමනු ඇත? ලිපිගොනු දේශීය රෙපෝ සහ දුරස්ථ ගබඩාවල තබා ගැනීමට මට අවශ්‍ය නම් ඒවා ගැන අමතක කරන්න.
අවිෂේ 28

AFAIK මෙය ඉතිහාසයෙන් ලිපිගොනු මකා නොදමනු ඇත, මන්ද අප ඉතිහාසය වෙනස් කරන විධානයන් භාවිතා නොකරන නිසාය (මා වැරදියි නම් මාව නිවැරදි කරන්න). මෙය නව බැඳීමක් එක් කරන්නේ gitignore හි නොසලකා හරින ලද ගොනු git වෙතින් මකා දැමීමෙන් පමණි. ඓතිහාසික අනාචාරයේ
Dheeraj Bhaskar

49

මම මෙය ඉටු කළේ git filter-branch භාවිතා කරමිනි . මා භාවිතා කළ නිශ්චිත විධානය man පිටුවෙන් ලබාගෙන ඇත:

අවවාදයයි : මෙය ඔබගේ සමස්ත ඉතිහාසයෙන් ගොනුව මකා දමනු ඇත

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

මෙම විධානය මඟින් සමස්ත කැපවීමේ ඉතිහාසයම ප්‍රතිනිර්මාණය කරනු ඇති අතර, git rmඑක් එක් බැඳීමට පෙර ක්‍රියාත්මක වන අතර එමඟින් නිශ්චිත ගොනුව ඉවත් කරනු ඇත. එය විධානය ධාවනය පෙර එය තහවුරු කිරීම අමතක කරන්න එපා ඇත අහිමි කළ යුතුය.


9
මෙය සියලු බැඳීම් හැඳුනුම්පත් වෙනස් කරනු ඇත, එමඟින් ඔබේ ගබඩාවේ පිටපතට පිටතින් ඇති ශාඛා ඒකාබද්ධ කිරීම බිඳ දමයි.
bdonlan

19
අවවාදයයි: මෙය ඔබගේ සමස්ත ඉතිහාසයෙන් ගොනුව මකා දමනු ඇත. අනුවාද ඉතිහාසයේ බොහෝ කලකට පෙර සිදු කරන ලද සම්පූර්ණයෙන්ම අනවශ්‍ය හා විශාල කළ ගොනුවක් (කිසි විටෙකත් සිදු නොවිය යුතු ප්‍රතිදානය) ඉවත් කිරීමට මා බලාපොරොත්තු වූයේ මෙයයි.
zebediah49

48

මට වැඩ නොකළ දේ

(ලිනක්ස් යටතේ), ls-files --ignored --exclude-standard | xargs git rm -r --cachedප්‍රවේශය යෝජනා කරමින් මෙහි ලිපි භාවිතා කිරීමට මට අවශ්‍ය විය . කෙසේ වෙතත්, (සමහරක්) ඉවත් කළ යුතු ලිපිගොනු වල නව රේඛාවක් / එල්එෆ් / \nඒවායේ නම් ඇතුළත් කර ඇත. විසඳුම් දෙකම:

git ls-files --ignored --exclude-standard | xargs -d"\n" git rm --cached
git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

මෙම තත්වයට මුහුණ දෙන්න (සොයාගත නොහැකි ලිපිගොනු පිළිබඳ දෝෂ ලබා ගන්න).

ඒ නිසා මම ඉදිරිපත් කරනවා

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached
git commit -am "Remove ignored files"

මෙය භාවිතා කරයි -zකිරීමට තර්කය LS-ගොනු , සහ -0කිරීමට තර්කය xargs ගොනු නාමය දී "මොහොත," අක්ෂර සඳහා ආරක්ෂිතව / නිවැරදිව උචිත.

අත්පොත පිටුවේ git-ls-files (1) හි මෙසේ සඳහන් වේ:

-Z විකල්පය භාවිතා නොකරන විට, මාර්ග නාමවල TAB, LF සහ බැක්ස්ලෑෂ් අක්ෂර පිළිවෙලින් \ t, \ n සහ as ලෙස නිරූපණය කෙරේ.

එබැවින් ගොනු නාමවල මෙම අක්ෂර කිසිවක් තිබේ නම් මගේ විසඳුම අවශ්‍ය යැයි මම සිතමි.


1
මට නම් මෙය හොඳම විසඳුමයි. එය a ට වඩා හොඳ කාර්ය සාධනයක් ඇත git add .. ඉහත අදහස් දැක්වීම් වලින් හොඳම වැඩිදියුණු කිරීම් ද එහි අඩංගු වේ.
Nils-o-mat

git commit -am "Remove ignored files"ඔබේ පිළිතුරට පසුව සොෆ්ට් එකතු කළ හැකිද ? ඔබගේ පිළිතුරු ඒකාබද්ධ වීමෙන් මට කරුණු ලැබුණි: j
kando

මට අරමුණ තේරෙන්නේ නැහැ git commit -a. මට git rm --cachedහරියටම දර්ශකයට බලපාන බැවින් ගොනු පසුව
ජීන් පෝල්

23
  1. ඔබගේ .gitignoreගොනුව යාවත්කාලීන කරන්න - නිදසුනක් ලෙස, ඔබට ලුහුබැඳීමට අවශ්‍ය නැති ෆෝල්ඩරයක් එක් කරන්න .gitignore.

  2. git rm -r --cached .- අවශ්‍ය සහ අනවශ්‍ය ඇතුළුව සියලුම ලුහුබැඳ ඇති ලිපිගොනු ඉවත් කරන්න. ඔබ දේශීයව සුරකින තාක් කල් ඔබේ කේතය ආරක්ෂිත වේ.

  3. git add .- ඇති ලිපිගොනු හැර අනෙක් සියලුම ගොනු නැවත ඇතුලත් වේ .gitignore.


අපව නිවැරදි දිශාවට යොමු කිරීම සඳහා k අකිරයමමොටෝ වෙත තොප්පියක්.


1
කෙසේ වෙතත් rm නැවත නැවත ධාවනය කිරීමට ඔබට -r අවශ්‍ය බැවින් එය සැබවින්ම ක්‍රියා නොකරනු ඇත. (කවුරුහරි නිවැරදිව පිටපත් නොකළේය)
අරන් මුල්හෝලන්ඩ්

1
අවවාදයයි: මෙම තාක්‍ෂණය ඇත්ත වශයෙන්ම git ගොනුව නොසලකා හැරීමට හේතු නොවේ, ඒ වෙනුවට එය ඇත්ත වශයෙන්ම git ගොනුව මකා දැමීමට හේතු වේ. ඒ කියන්නේ ඔබ මෙම විසඳුම භාවිතා කරන්නේ නම්, වෙනත් අයෙකු ඕනෑම වේලාවක git අදින්නේ නම්, ගොනුව මකා දැමෙනු ඇත. එබැවින් එය සැබවින්ම නොසලකා හරිනු නොලැබේ. මුල් ප්‍රශ්නයට විසඳුමක් සඳහා git update-index --assume-නොවෙනස්ව යෝජනා කරන විසඳුම බලන්න.
ඕර්ඩ්

16

මම හිතන්නේ, සමහර විට එය ගොනුව සංකල්පනය කිරීම නිසා සම්පූර්ණයෙන්ම අමතක කළ නොහැක ( "ස්නැප්ෂොට්, වෙනස්කම් නොවේ" යන කොටස ).

උදාහරණයක් ලෙස, සීවීඑස් භාවිතා කරන විට මෙම ගැටළුව නොමැත. CVS තොරතුරු ගොනු පදනම් කරගත් වෙනස්කම් ලැයිස්තුවක් ලෙස ගබඩා කරයි. සීවීඑස් සඳහා තොරතුරු යනු ලිපිගොනු සමූහයක් වන අතර කාලයත් සමඟ එක් එක් ගොනුවට කරන ලද වෙනස්කම් වේ.

නමුත් Git හි ඔබ කැපවන සෑම අවස්ථාවකම හෝ ඔබේ ව්‍යාපෘතියේ තත්වය සුරකින විට, එය මූලික වශයෙන් ඔබගේ සියලු ලිපිගොනු ඒ මොහොතේ පෙනෙන්නේ කෙසේද යන්න පිළිබඳ පින්තූරයක් ගන්නා අතර එම ඡායාරූපයට යොමු කිරීමක් ගබඩා කරයි. එබැවින්, ඔබ එක් වරක් ගොනුව එක් කළහොත්, එය සෑම විටම එම ඡායාරූපයේ අඩංගු වේ.

මෙම ලිපි දෙක මට ප්‍රයෝජනවත් විය:

git උපකල්පනය-නොවෙනස්ව එදිරිව skip-worktree සහ Git සමඟ ලුහුබැඳ ඇති ලිපිගොනු වල වෙනස්කම් නොසලකා හරින ආකාරය

ගොනුව දැනටමත් ලුහුබැඳ තිබේ නම්, එය පදනම් කරගෙන මම පහත සඳහන් දේ කරමි:

git update-index --skip-worktree <file>

මේ මොහොතේ සිට මෙම ගොනුවේ සියලුම දේශීය වෙනස්කම් නොසලකා හරිනු ඇති අතර දුරස්ථයට නොයනු ඇත. දුරස්ථව ගොනුව වෙනස් කළ හොත්, ගැටුම් ඇති git pullවේ. ස්ටෑෂ් ක්‍රියා නොකරයි. එය විසඳීම සඳහා, ගොනු අන්තර්ගතය ආරක්ෂිත ස්ථානයට පිටපත් කර මෙම පියවර අනුගමනය කරන්න:

git update-index --no-skip-worktree <file>
git stash
git pull 

ගොනු අන්තර්ගතය දුරස්ථ අන්තර්ගතයෙන් ප්‍රතිස්ථාපනය වේ. ඔබගේ වෙනස්කම් ආරක්ෂිත ස්ථානයේ සිට ගොනුවට අලවා නැවත ක්‍රියාත්මක කරන්න:

git update-index --skip-worktree <file>

ව්යාපෘතිය සමඟ වැඩ කරන සෑම කෙනෙකුම ඉටු කරන්නේ නම් git update-index --skip-worktree <file>, ගැටළු pullනොමැති විය යුතුය. සෑම සංවර්ධකයෙකුටම තමන්ගේම ව්‍යාපෘති වින්‍යාසයක් ඇති විට, වින්‍යාස ගොනු සඳහා මෙම විසඳුම හරි ය.

දුරස්ථව ගොනුව වෙනස් කර ඇති සෑම අවස්ථාවකම මෙය කිරීම එතරම් පහසු නැත, නමුත් දුරස්ථ අන්තර්ගතයන් නැවත ලිවීමෙන් එය ආරක්ෂා කළ හැකිය.


16

පහත දැක්වෙන පියවර අනුක්‍රමිකව කරන්න, ඔබ හොඳින් වනු ඇත.

1. ඩිරෙක්ටරියෙන් / ගබඩාවෙන් වැරදියට එකතු කළ ගොනු ඉවත් කරන්න . ඔබට "rm -r" (linux සඳහා) විධානය භාවිතා කළ හැකිය, නැතහොත් නාමාවලි පිරික්සීමෙන් ඒවා මකා දැමිය හැකිය. නැතහොත් ඒවා ඔබේ පරිගණකයේ වෙනත් ස්ථානයකට ගෙන යන්න. [ චලනය / ඉවත් කිරීම සඳහා ධාවනය වන්නේ නම් ඔබට IDE වසා දැමිය යුතුය ]

2. දැන් ගොනු කිරීමට ගොනු / නාමාවලි එකතු gitignoreකර එය සුරකින්න.

3. දැන් මෙම විධානයන් භාවිතා කිරීමෙන් ඒවා git හැඹිලියෙන් ඉවත් කරන්න (බහලුම් එකකට වඩා තිබේ නම්, මෙම විධානය නැවත නැවත නිකුත් කිරීමෙන් ඒවා එකින් එක ඉවත් කරන්න)

git rm -r --cached path-to-those-files

4.now කරන්න ඇති කොමිට් තල්ලුව , මෙම විධානය භාවිතා කරන්න. මෙමඟින් එම ගොනු git දුරස්ථයෙන් ඉවත් කර git එම ගොනු ලුහුබැඳීම නවත්වනු ඇත.

git add .
git commit -m "removed unnecessary files from git"
git push origin

13

පිටපත / පේස්ට් පිළිතුර git rm --cached -r .; git add .; git status

මෙම විධානය මඟින් දැනටමත් Git නිධියකට බැඳී ඇති ගොනු නොසලකා හරිනු ඇත, නමුත් දැන් අපි ඒවා එකතු කර ඇත්තෙමු .gitignore.


9

මැට් ෆියර්ගේ පිළිතුර වඩාත් effective ලදායී IMHO විය. පහත දැක්වෙන්නේ වින්ඩෝස් වල සිටින අයට ඔවුන්ගේ බැහැර කිරීමේ ලැයිස්තුවට ගැලපෙන ඔවුන්ගේ git repo වෙතින් ගොනු ඉවත් කිරීමට පමණි.

# Get files matching exclusionsfrom .gitignore
# Excluding comments and empty lines
$ignoreFiles =  gc .gitignore | ?{$_ -notmatch  "#"} |  ?{$_ -match  "\S"} | % {
                    $ignore = "*" + $_ + "*"
                    (gci -r -i $ignore).FullName
                }
$ignoreFiles = $ignoreFiles| ?{$_ -match  "\S"}

# Remove each of these file from Git 
$ignoreFiles | % { git rm $_}

git add .

මෙම ලිපිගොනු ලැයිස්තුව පුනරාවර්තන - හැඹිලියට සමාන නොවන්නේ කුමන තත්වයකද?
ජෝන් සැබ්‍රොස්කි

8

ගොනුව ආරක්ෂිත ස්ථානයකට ගෙනයන්න හෝ පිටපත් කරන්න, එවිට ඔබට එය නැති නොවේ. ඉන්පසු ගොනුව rm කර බැඳ තබන්න. ඔබ කලින් කළ එක් කටයුත්තකට හෝ එය ඉවත් නොකළ වෙනත් ශාඛාවකට ආපසු ගියහොත් ගොනුව තවමත් පෙන්වනු ඇත. කෙසේ වෙතත්, සියලු අනාගත කොමිස් වලදී, ඔබට නැවත ගොනුව නොපෙනේ. ගොනුව නොසලකා හරින්නේ නම්, ඔබට එය නැවත ෆෝල්ඩරයට ගෙන යා හැකි අතර git එය නොපෙනේ.


34
git rm --cachedගොනුව තැටියෙන් මකා
නොදමනු ඇත

7

git rm --cachedවිධානය භාවිතා කිරීමෙන් මුල් ප්‍රශ්නයට පිළිතුරු නොලැබේ:

git[ගොනුවක්] සම්පූර්ණයෙන්ම අමතක කිරීමට ඔබ බල කරන්නේ කෙසේද ?

ඇත්ත වශයෙන්ම, මෙම විසඳුම මඟින් ගොනුව ගබඩාවේ අනෙක් සෑම අවස්ථාවකම මකා දැමීමට හේතු වනු ඇත git pull.

ගොනුවක් අමතක කිරීමට git බල කිරීමට නිවැරදි ක්‍රමය මෙහි ලේඛනගත කර ඇත්තේ GitHub විසිනි.

ප්‍රලේඛනය කියවීමට මම නිර්දේශ කරමි, නමුත් මූලික වශයෙන්:

git fetch --all
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch full/path/to/file' --prune-empty --tag-name-filter cat -- --all
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

full/path/to/fileගොනුවේ සම්පූර්ණ මාර්ගය සමඟ ප්‍රතිස්ථාපනය කරන්න. ඔබ ගොනුව ඔබගේ එකතු කර ඇති බවට වග බලා ගන්න .gitignore.

ඔබ ඔබේ තාවකාලික ඉතිහාසය වෙනස් කරන බැවින් (තාවකාලිකව) ඔබේ ගබඩාවට වේගයෙන් ඉදිරියට නොයෑමට ඉඩ දිය යුතුය.


5

මෙම BFG '--strip-blobs-: එය ඕනෑම විශාල ඓතිහාසික (නෑ-in-ඔබේ-වත්මන්-නසා) ගොනු ඉවත් කරන බවට සරල ධජය ඇත එසේ, විශේෂයෙන් Git ප්රතිමිලදී සිට විශාල ගොනු හෝ මුරපද වගේ අනවශ්ය දත්ත ඉවත් කිරීම සඳහා සැලසුම් කර ඇත වඩා විශාල '

$ java -jar bfg.jar --strip-blobs-bigger-than 100M

ඔබ නමින් ලිපිගොනු නියම කිරීමට කැමති නම්, ඔබට එය ද කළ හැකිය:

$ java -jar bfg.jar --delete-files *.mp4

BFG git filter-branch වලට වඩා 10-1000x වේගවත් වන අතර සාමාන්‍යයෙන් භාවිතා කිරීමට වඩා පහසුය - වැඩි විස්තර සඳහා සම්පූර්ණ භාවිත උපදෙස් සහ උදාහරණ පරීක්ෂා කරන්න .

මුලාශ්‍රය: https://confluence.atlassian.com/bitbucket/reduce-repository-size-321848262.html


5

ඔබට සීඑල්අයි භාවිතා කිරීමට අවශ්‍ය නැතිනම් වින්ඩෝස් හි වැඩ කරන්නේ නම්, ඉතා සරල විසඳුමක් වන්නේ ඉබ්බන්ගිට් භාවිතා කිරීමයි , එයට මෙනුවේ “මකන්න (දේශීයව තබා ගන්න)” ක්‍රියාව ඇත.


5

මම ජෝන්බ්‍රේව්ගේ පිළිතුරට කැමතියි, නමුත් මට වැඩ කරන ඩිරෙක්ටරි ප්‍රමාණවත් තරම් අවුල් සහගතය - එය මට ටිකක් බයයි, එබැවින් මෙන්න මම කළ දේ:

git config --global alias.exclude-ignored '! git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached && git ls-files -z --ignored --exclude-standard | xargs -0 git stage && git stage .gitignore && git commit -m "නව gitignore සහ නොසලකා හරින ලද ගොනු දර්ශකයෙන් ඉවත් කරන්න"

එය බිඳ දැමීම:

git ls-files -z --ignored --exclude-standard | xargs -0 git rm -r --cached 
git ls-files -z --ignored --exclude-standard | xargs -0 git stage 
git stage .gitignore 
git commit -m "new gitignore and remove ignored files from index"
  • නොසලකා හරින ලද ගොනු දර්ශකයෙන් ඉවත් කරන්න
  • අදියර .gitignore සහ ඔබ දැන් ඉවත් කළ ගොනු
  • කැපවන්න

4

මෙය නවතම git හි තවදුරටත් ගැටළුවක් නොවේ (ලියන අවස්ථාවේ v2.17.1).

මෙම .gitignoreඅවසානයේ දම්වැල් මත ධාවනය වන-නමුත්-මකා නොසලකා හරියි ගොනු. පහත දැක්වෙන ස්ක්‍රිප්ට් ධාවනය කිරීමෙන් ඔබට මෙය පරීක්ෂා කර බැලිය හැකිය. අවසාන git statusප්‍රකාශය "කැපවීමට කිසිවක් නැත" යනුවෙන් වාර්තා කළ යුතුය.

# Create empty repo
mkdir gitignore-test
cd gitignore-test
git init

# Create a file and commit it
echo "hello" > file
git add file
git commit -m initial

# Add the file to gitignore and commit
echo "file" > .gitignore
git add .gitignore
git commit -m gitignore

# Remove the file and commit
git rm file
git commit -m "removed file"

# Reintroduce the file and check status.
# .gitignore is now respected - status reports "nothing to commit".
echo "hello" > file
git status

මට සතුටුයි git දැන් මෙය කිරීම. කෙසේ වෙතත්, OP විසින් විමසනු ලැබුවේ .gitignore හි ඇති ලිපිගොනු වල වෙනස් කිරීම් සොයා නොගැනීම ගැන ය.
mrturtle

2

දැනටමත් කැපවී ඇත්නම් DS_Store:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch

ඒවා නොසලකා හරින්න:

echo ".DS_Store" >> ~/.gitignore_global
echo "._.DS_Store" >> ~/.gitignore_global
echo "**/.DS_Store" >> ~/.gitignore_global
echo "**/._.DS_Store" >> ~/.gitignore_global
git config --global core.excludesfile ~/.gitignore_global

අවසාන වශයෙන්, කැපවීමක් කරන්න!


2

විශේෂයෙන් IDE මත පදනම් වූ ලිපිගොනු සඳහා, මම මෙය භාවිතා කරමි:

නිදසුනක් ලෙස slnx.sqlite, මම පහත දැක්වෙන ආකාරයට මුළුමනින්ම ඉවත් කර ගතිමි:

git rm {PATH_OF_THE_FILE}/slnx.sqlite -f
git commit -m "remove slnx.sqlite"

එම ලිපිගොනු සමහරක් දේශීය පරිශීලක සැකසුම් සහ ව්‍යාපෘති සඳහා මනාපයන් ගබඩා කරන බව මතක තබා ගන්න (ඔබ විවෘත කළ ගොනු වැනි). එබැවින් ඔබ සැරිසැරීමේදී හෝ ඔබගේ IDE හි යම් යම් වෙනස්කම් සිදු කරන සෑම අවස්ථාවකම එම ගොනුව වෙනස් වන අතර එම නිසා එය පරීක්ෂා කර බලා නොගැලපෙන වෙනස්කම් ඇති බව පෙන්වයි.


2

පිළිගත් පිළිතුර ගොනුවක් ගැන " 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>සොයා ගත හැක උදාහරණ වන මෙහි .


0

යමෙකුට වින්ඩෝස් හි අසීරු කාලයක් තිබේ නම් සහ ඔබට සම්පූර්ණ ෆෝල්ඩරය නොසලකා හැරීමට අවශ්‍ය නම්, 'සීඩී' 'ෆෝල්ඩරය' අපේක්‍ෂා කර 'මෙහි Git Bash' කරන්න.

git ls-files -z | xargs -0 git update-index --assume-unchanged

0

මගේ නඩුවේදී, මට ඉවත් කිරීමට අවශ්‍ය ඩිරෙක්ටරි කිහිපයක .lock ගොනු කිහිපයක් තිබුණි. මම පහත සඳහන් දෑ ධාවනය කළ අතර ඒවා ඉවත් කිරීම සඳහා එක් එක් නාමාවලියට නොයා එය ක්‍රියාත්මක විය:

git rm -r --cached **/*.lock

මෙය කිරීමෙන් මා සිටි ස්ථානයේ 'root' යටතේ ඇති සෑම ෆෝල්ඩරයකටම ගොස් රටාවට ගැලපෙන සියලුම ගොනු බැහැර කර ඇත.

මෙය අන් අයට උපකාරී වේ යැයි සිතමු!

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.