Git හි ගොනුවක වෙනස්කම් නිරීක්ෂණය කිරීම සහ නොසලකා හැරීම කරන්නේ කෙසේද?


1747

මම සමහර .csprojලිපිගොනු ඇතුළත් ව්‍යාපෘතියක් ක්ලෝන කර ඇත . මගේ දේශීය csprojලිපිගොනු Git විසින් ලුහුබැඳීම (හෝ පැච් එකක් සෑදීමේදී ගෙන ඒම) මට අවශ්‍ය නැත / කැමති නැත , නමුත් පැහැදිලිවම ඒවා ව්‍යාපෘතියේ අවශ්‍ය වේ.

මම *.csprojමගේ LOCAL වෙත එකතු කර ඇත .gitignore, නමුත් ලිපිගොනු දැනටමත් repo හි ඇත.

මම git තත්ත්වය ටයිප් කරන විට, එය csprojපැච් ගැන සොයා බැලීමට හෝ ඉදිරිපත් කිරීමට මා උනන්දු නොවන මගේ වෙනස්කම් පෙන්වයි .

මෙම ලිපිගොනු මගේ පුද්ගලික ගබඩාවෙන් ඉවත් කිරීම (නමුත් ඒවා ප්‍රභවයේ තබා ගන්න එවිට මට ඒවා භාවිතා කළ හැකිය) එවිට මම තත්වයක් කරන විට (හෝ පැච් එකක් සාදන විට) වෙනස්කම් නොපෙනේ.

මෙම තත්වය හැසිරවීමට නිවැරදි / කැනොනිකල් ක්‍රමයක් තිබේද?


19
ඉතා ප්‍රයෝජනවත් ප්‍රශ්නයක්, නමුත් .csprojඕනෑම ව්‍යාපෘතියක වැදගත් අංගයක් වන ගොනුවේ වෙනස්කම් සොයා ගැනීමට ඔබට අවශ්‍ය නොවන්නේ මන්දැයි මට කුතුහලයක් ඇත . ලුහුබැඳ නොයෑම මට සම්පූර්ණයෙන්ම වටහා ගත හැකි .csproj.userගොනුවේ හෝ ඕනෑම .Publish.XMLලිපිගොනු වල වෙනස්වීම් , නමුත් ඔබට කුතුහලය දනවන කරුණක් වන්නේ ඔබට එය නිරීක්ෂණය කිරීමට අවශ්‍ය නොවන්නේ මන්ද යන්නයි .csproj
ඕවන් බ්ලැකර්

7
සමහර විට ඔවුන් වෙනත් IDE එකක් භාවිතා කරයිද?
ජැරට්

3
හාස්‍යයට කරුණක් නම්, මම මෙම ත්‍රෙඩ් එකට පැමිණියේ .suo ගොනු repo එකකින් ඉවත් කිරීමට බලාපොරොත්තු වන නමුත් ඒවා දේශීයව තබා ගැනීමයි. පසු පරම්පරාව සඳහා, .නෙට් සංවර්ධනය සඳහා .csproj ලිපිගොනු ගබඩාවේ තබා ගැනීම අවශ්‍ය වන අතර ඔබේ ව්‍යාපෘතියේ වෙනත් සංවර්ධකයින්ගේ කෝපය ඔබට දැනෙන්නට අවශ්‍ය නැතිනම් එම වෙනස්කම් සැමවිටම නිරීක්ෂණය කළ යුතුය. කවදා හෝ සැක සහිත නම්, GitHub හි ඇති gitignore ගොනු ගබඩාව දෙස බලන්න: github.com/github/gitignore/blob/master/VisualStudio.gitignore
longda

1
Up කප්කේක්, ඔබ සම්බන්ධ කර ඇති ප්‍රශ්නය මෙයට දින 15 කට පසුව ලියා තිබේද? සමහරවිට ඔබට තවත් මතකයක් තිබේද?
stephenmurdoch

@ මාෆ්ලර් කැනොනිකල් ප්‍රශ්න අනිවාර්යයෙන්ම පැරණිතම ඒවා විය යුතු නැත, හොඳම ඒවා පමණි. මා සම්බන්ධ කළ පිළිතුරට පිළිතුරු 20 ක් ඇති අතර, මේ සතුව ඇත්තේ 5 ක් පමණි.

Answers:


2145

git rm --cachedසංශෝධන පාලනයෙන් ඉවත් කිරීමට අවශ්‍ය සෑම ලිපිගොනුවකටම ඇමතීම හොඳ විය යුතුය. ඔබගේ දේශීය නොසලකා හැරීමේ රටා නිවැරදි වන තාක් කල්, මෙම ලිපිගොනු git තත්වයේ ප්‍රතිදානයට ඇතුළත් නොවන බව ඔබට පෙනෙනු ඇත.

මෙම විසඳුම මඟින් ගබඩාවෙන් ලිපිගොනු ඉවත් කරන බව සලකන්න, එබැවින් සියලු සංවර්ධකයින්ට තමන්ගේම දේශීය (සංශෝධන නොවන) ගොනුවේ පිටපත් පවත්වා ගැනීමට අවශ්‍ය වනු ඇත.

මෙම ලිපිගොනු වල වෙනස්කම් හඳුනා ගැනීමෙන් වලක්වා ගැනීම සඳහා ඔබ මෙම විධානයද භාවිතා කළ යුතුය:

git update-index --assume-unchanged [path]

ඔබට බොහෝ විට කිරීමට අවශ්‍ය දේ: (පහළ සිට @ රයන් ටේලර් පිළිතුර )

  1. මෙය ගොනුවේ හෝ ෆෝල්ඩරයේ ඔබේම ස්වාධීන අනුවාදයක් අවශ්‍ය බව git ට පැවසීමයි. නිදසුනක් ලෙස, නිෂ්පාදන / වේදිකා වින්‍යාස ගොනු නැවත ලිවීමට (හෝ මකා දැමීමට) ඔබට අවශ්‍ය නැත.

git update-index --skip-worktree <path-name>

සම්පූර්ණ පිළිතුර මෙම URL හි ඇත: http://source.kohlerville.com/2009/02/untrack-files-in-git/


191
"git rm --cached <file>" මඟින් <file> අනුවාද පාලකයෙන් ඉවත් කරනු ඇති අතර එය වැඩ කරන ගබඩාවේ තබා ගනී. එය ඔබට අවශ්‍ය දේ වේවා ...
ජකුබ් නාරබ්ස්කි

51
නමුත් වෙනත් අය නිධිය ඇද ගන්නා විට, ඔවුන්ගේම * .csproj ගොනුව ඉවත් වේ ද? මොකද අපට අවශ්‍ය නම් ගොනුව ඉවත් නොකිරීමට, නමුත් මකා දැමීමට නොවේ.
FMaz008

23
ඔබ නාමාවලියක ඇති සියලුම ගොනු ඉවත් කිරීමට උත්සාහ කරන්නේ නම්, එය git ls-files සමඟ ඒකාබද්ධ කරන්න: git ls-files | xargs git rm --cached- එමඟින් නියම ලිපිගොනු වල ඇති git දර්ශකයෙන් සත්‍ය ලිපිගොනු මකා නොදමනු ඇත.
මාකෝ

129
git rm --cached -r <dir>ෆෝල්ඩරයක සහ එහි ඇති සියලුම ලිපිගොනු වල පුනරාවර්තව ක්‍රියා කරයි.
ක්‍රිස් කේ

41
මෙය ගොනුව ලුහුබැඳීම නවත්වනු ඇත, එය දේශීයව සංරක්ෂණය කරයි, නමුත් එය අදින ඕනෑම කෙනෙකුට මකා දැමීමට හේතු වේ
එඩ්වඩ් නිවෙල්

250

ඔබ එසේ කරන්නේ නම් git update-index --assume-unchanged file.csproj, git ස්වයංක්‍රීයව වෙනස්කම් සඳහා file.csproj පරීක්ෂා නොකරනු ඇත: එමඟින් ඔබ ඒවා වෙනස් කරන සෑම විටම ඒවා git තත්වයට පැමිණීම වළක්වනු ඇත. එබැවින් ඔබට ඔබගේ .csproj ලිපිගොනු සියල්ලම මේ ආකාරයෙන් සලකුණු කළ හැකිය- නමුත් ඔබට උඩුමහලේ repo මඟින් ඔබ වෙත යවන ඕනෑම නව ඒවා අතින් සලකුණු කළ යුතුය. (ඔබ සතුව ඒවා තිබේ නම් .gitignoreහෝ .git/info/excludeඔබ නිර්මාණය කළ ඒවා නොසලකා හරිනු ඇත)

.Csproj ලිපිගොනු යනු කුමක්දැයි මට සම්පුර්ණයෙන්ම විශ්වාස නැත ... ඒවා IDE වින්‍යාසයන් (Eclipse හි .eclipse සහ .classpath ලිපිගොනු වලට සමාන) යමක් නම්, එවිට මම යෝජනා කරන්නේ ඒවා කිසි විටෙකත් ප්‍රභවයෙන් පාලනය නොකළ යුතු බවයි. සියළු. අනෙක් අතට, ඔවුන් ගොඩනැඟීමේ පද්ධතියේ (Makefiles වැනි) කොටසක් නම් පැහැදිලිවම ඔවුන් කළ යුත්තේ --- සහ විකල්ප දේශීය වෙනස්කම් ලබා ගැනීමේ ක්‍රමයක් (උදා: local.csproj a la config.mk වෙතින්) ප්‍රයෝජනවත් වේ : ගොඩනැගීම ගෝලීය කොටස් සහ දේශීය අතිච්ඡාදනයන් ලෙස බෙදා වෙන් කරන්න.


8
csproj යනු C # ව්‍යාපෘති ගොනුවක් වන අතර එය ඔබගේ ව්‍යාපෘතියට ඇතුළත් කර ඇති ගොනු සහ අනෙකුත් වින්‍යාසයන් පිළිබඳව
සොයා බලයි

4
මෙහි ඇති එකම නිවැරදි පිළිතුර මෙයයි! මම වසර ගණනාවක් තිස්සේ @araqnids පිළිතුර භාවිතා කර ඇති අතර එය මෙම ගැටළුව විසඳීම සඳහා ඉල්ලා ඇති ආකාරයටම ක්‍රියාත්මක වේ.
එන්එච්ඩාලි

විධානයට තර්කයේ ඇති 'ගොනුව' උපසර්ගයේ තේරුම කුමක්ද? එය සාධාරණ නොවන්නේ ඇයි .csproj?
ග්‍රීන්ඒස් ජේඩ්

1
මෙය ගොනුවක් සඳහා සිදු කර ඇති බව ඔබට හඳුනාගත හැකි ක්‍රමයක් තිබේද, නැතහොත් මෙය repo එකක කර ඇති ගොනු මොනවාද? මම මෙය කළ බව අමතක කිරීම ගැන මම තරමක් බියට පත්ව සිටිමි, පසුව මෙම ගොනුව යාවත්කාලීන නොවන්නේ මන්දැයි කල්පනා කරමි.
GreenAsJade

4
@GreenAsJade: git ls-files -vකුඩා අකුරු දර්ශකයක් සමඟ නොවෙනස්ව උපකල්පනය කරන ලද ගොනු පෙන්වනු ඇත (උදා: හැඹිලි ගොනු සඳහා hසුපුරුදු වෙනුවට H).
අමන්දාන්

244

විකල්ප 3 ක් ඇත, ඔබට බොහෝ විට # 3 අවශ්‍ය වේ

1. මෙය දේශීය ගොනුව ඔබ වෙනුවෙන් තබාගනු ඇත, නමුත් වෙනත් අය ඔවුන් ඇද ගන්නා විට එය මකා දමනු ඇත.

git rm --cached <file-name> හෝ git rm -r --cached <folder-name>

2. මෙය ප්‍රශස්තිකරණය සඳහා වන අතර, ගොනු විශාල සංඛ්‍යාවක් ඇති ෆෝල්ඩරයක් වැනි, උදා: SDKs කිසි විටෙකත් වෙනස් නොවනු ඇත. සෑම විටම එම විශාල ෆෝල්ඩරය දේශීයව වෙනස්වීම් සඳහා පරීක්ෂා කිරීම නවත්වන ලෙස එය git ට පවසයි. මෙම assume-unchanged(ඔබ අදින්න විට) ගොනු / ෆෝල්ඩර ඉහළින් උමාඔයේ වෙනස්කම් පවතී නම් දර්ශකය යළි පිහිටුවීමේ සහ ගොනු (ව) උඩින් ලියැවෙනු ඇත.

git update-index --assume-unchanged <path-name>

3. මෙය ඔබට ගොනුවේ හෝ ෆෝල්ඩරයේ ස්වාධීන අනුවාදයක් අවශ්‍ය බව git ට පැවසීමයි. නිදසුනක් ලෙස, නිෂ්පාදන / වේදිකා වින්‍යාස ගොනු නැවත ලිවීමට (හෝ මකා දැමීමට) ඔබට අවශ්‍ය නැත.

git update-index --skip-worktree <path-name>

එය git සමඟ git update-index ප්‍රචාරය නොවන බව දැන ගැනීම වැදගත් වන අතර සෑම පරිශීලකයෙකුටම එය ස්වාධීනව ක්‍රියාත්මක කිරීමට සිදුවනු ඇත.


10
මෙම පිළිතුර වඩාත්ම සම්පූර්ණයි - එය එක් එක් ඒවායේ ප්‍රබලතාවයන් සමඟ විවිධ විසඳුම් ලබා දෙයි. මා සමඟ වැඩ කරන විශේෂිත නඩුවේ වින්‍යාස ගොනුවක මුරපදයක් ඇතුළත් කර ඇත. මට අච්චු ගොනුවක් ප්‍රචාරය කිරීමට අවශ්‍ය වන අතර පසුව මගේ පිටපතට මුරපදය එක් කරන්න. මුරපදය සහිත පිටපත නොසලකා හැරිය යුතු අතර නැවත ලියනු නොලැබේ.
bmacnaughton

1
'උපකල්පනය-නොවෙනස්ව' හෝ 'මඟහරින්න-වැඩ කිරීම' සඳහා අදාළ වන ලිපිගොනු මගේ දේශීයව පරීක්ෂා කරන්නේ කෙසේද?
සුපාවට් පුසවාන්නෝ

3
UppSupawatPusavanno ඔබ කලින් තෝරාගෙන ඇති ලිපිගොනු උපකල්පනය-වෙනස් නොවන හෝ වැඩ-වැඩ සඳහා මෙම පිළිතුර බලන්න stackoverflow.com/questions/42363881/… - එය භාවිතා කරන grepඅතරgit ls-files
රයන් ටේලර්

1
ඉතා හොඳ පිළිතුරක්. නමුත් මම වෙනත් ශාඛාවකට මාරුවීමට උත්සාහ කරන විට git දෝෂය විසි කරයි: දෝෂය: "පහත දැක්වෙන ලිපිගොනු වල ඔබගේ දේශීය වෙනස්කම් පිරික්සුම් මගින් නැවත ලියනු ලැබේ ....." ඔබ නැවත ශාඛාවට පැමිණේ.
PhantomReference

Yan රයන් ටේලර්: මම මුලින් නොවෙනස්ව උපකල්පනය කිරීමට උත්සාහ කර ඇත්තෙමි (වැඩ කළේ නැත) සහ වැඩ ට්‍රී විධානය මඟ හරින්න (වැඩ කළේ නැත), මම git තත්ත්වය සමඟ පරීක්ෂා කළ විට ලිපිගොනු නොපෙන්වන අතර එයින් කියවෙන්නේ විධානය ක්‍රියාත්මක වූ බවයි. නමුත් මම it gives me error that your local changes would be overwrittenඑම ලිපිගොනු 2 හි ඇති git origin repo වෙතින් නැවත කේතය අදින විට එයින් අදහස් වන්නේ එය නිවැරදිව හඳුනා නොගැනීමයි?
NeverGiveUp161

152

මෙය පියවර දෙකක ක්‍රියාවලියකි:

  1. ගොනුව / ෆෝල්ඩරය ලුහුබැඳීම ඉවත් කරන්න - නමුත් ඒවා තැටියේ තබා ගන්න - භාවිතා කරන්න

    git rm --cached 
    

    දැන් ඒවා "වෙනස්" ලෙස නොපෙන්වන නමුත් තවමත් එසේ පෙන්වයි

        untracked files in  git status -u  
    
  2. ඒවාට එකතු කරන්න .gitignore


57
නැත, මෙය ගොනුව ලුහුබැඳීමෙන් ඉවත් කරයි, එය දේශීයව සංරක්ෂණය කරයි, නමුත් එය අදින ඕනෑම කෙනෙකුට මකා දැමීමට හේතු වේ.
එඩ්වඩ් නිවෙල්

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

4
ඔව්, එය ඇත්ත වශයෙන්ම අසන ලද ප්‍රශ්නයට වැරදි පිළිතුරකි - නමුත් බොහෝ විට මෙම ප්‍රශ්නය සෙවුම් ප්‍රති results ලවල (මා වැනි) සොයා ගන්නා නිවැරදි පිළිතුර විය හැකිය.
ස්පෙන්සර්

96

පිළිගත් පිළිතුර තවමත් මට සාර්ථක වූයේ නැත

මම පාවිච්චි කළා

git rm -r --cached.

git add.

git commit -m "සවි කිරීම .gitignore"

පිළිතුර මෙතැනින් හමු විය


.Gitignore
rmcsharry

9
මම 3 වතාවක් මෙහි පැමිණ ඇත, ඊළඟ වතාවට පෙර මට මතකය වෙනුවෙන් කැපවිය හැකිය!
හැරී බොෂ්

ඉහත පිළිතුරේ මෙන් එඩ්වඩ් නිවෙල්ගේ ප්‍රකාශය ද මෙහිදී අදාළ වේ: "මෙය ගොනුව ලුහුබැඳීමෙන් ඉවත් කරයි, එය දේශීයව සංරක්ෂණය කරනු ඇත, නමුත් අදින ඕනෑම කෙනෙකුට එය මකා දැමීමට හේතු වේ ".
ටොජෝ

47

ඔබේ .gitignore අමතකද?

ඔබ සතුව සම්පූර්ණ ව්‍යාපෘතියම දේශීයව ඇති නමුත් ඔබව එකතු කිරීමට අමතක වී ඇත්නම් එය නොසලකා හැර ඇති අතර දැන් සමහර අනවශ්‍ය ලිපිගොනු නිරීක්ෂණය කරමින් සිටී නම් සියල්ල ඉවත් කිරීමට මෙම විධානය භාවිතා කරන්න

git rm --cached -r .

ඔබ ව්‍යාපෘතියේ මුල සිටින බවට වග බලා ගන්න.

එවිට ඔබට සුපුරුදු පරිදි කළ හැකිය

එකතු කරන්න

git add .

කැප වන්න

git commit -m 'removed all and added with git ignore'

තල්ලුව

git push origin master

නිගමනය

ඔවුන්ගේ වෙනස්කම් කිරීමට .gitignoreහෝ සියල්ල අමතක වී ඇති පුද්ගලයින්ට මෙය උපකාරී වේ යැයි සිතමු.

  • එය සම්පූර්ණ හැඹිලිය ඉවත් කරයි
  • ඔබේ .gitignore දෙස බලයි
  • ඔබට නිරීක්ෂණය කිරීමට අවශ්‍ය ගොනු එක් කරයි
  • ඔබේ ගබඩාවට තල්ලු කරයි

4
ඔබ ඉවත් කිරීම හෝ එකතු කිරීම ගැන කතා කරන විට, ඔබට අමතක වන්නේ කවදාද සහ කොතැනද යන්නයි. ධාවන ලැයිස්තුවෙන් ඉවත් කරනවාද? ගබඩාවෙන්? දේශීය ව්‍යාපෘති අවකාශයෙන්? අදින විට ඉවත් කරනවාද? කැපවී සිටිනවාද? තල්ලු කිරීමේදී? අහෝ, මෙහි සිටින සියලුම කතුවරුන්ට ඇත්තේ එකම ගැටලුවකි.
ගන්ග්නස්

3
An ගැන්ග්නස් ඔබ කිරීමට උත්සාහ කරන කාරණය කිසිවෙකු 'පැහැදිලි කර' ඇතැයි මම නොසිතමි. මන්දයත් ගොනුව ඇත්ත වශයෙන්ම තැටියෙන් හෝ ගබඩාවෙන් ඉවත් නොකරන බවයි. මෙම පිළිතුර විධාන වල කාලානුක්‍රමික අනුපිළිවෙල නියම කරයි. ඔබේ අදහස යෝජනා කරන පරිදි එය අද්භූත හෝ වැරදි ලෙස පැහැදිලි කර නැත.
ඇන්තනි

ඉහත පිළිතුරේ මෙන් එඩ්වඩ් නිවෙල්ගේ ප්‍රකාශය ද මෙහිදී අදාළ වේ: "මෙය ගොනුව ලුහුබැඳීමෙන් ඉවත් කරයි, එය දේශීයව සංරක්ෂණය කරනු ඇත, නමුත් එය අදින ඕනෑම කෙනෙකුට මකා දැමීමට හේතු වේ ".
ටොජෝ

26

වෙනත් පිළිතුරු වල පෙන්වා ඇති පරිදි, තෝරාගත් පිළිතුර වැරදිය.

මෙම පිළිතුර තවත් ප්රශ්නයක් එය අවශ්ය බව සෙල්ලමකුත්-worktree විය හැකි බවයි.

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

2
නැත, ඇත්ත වශයෙන්ම නොවේ: ගොනුව ගබඩාවේ තබා ගැනීමට--skip-worktree භාවිතා කරන නමුත් එහි වෙනස්කම් නිරීක්ෂණය කිරීම නවත්වයි . ඔබේ පිළිතුර පවසන පරිදි: සංවර්ධකයින් එය වෙනස් කළ යුතු බැවින් නිශ්චිත ගොනුවක් ස්පර්ශ නොකරන ලෙස ඔබ git ට උපදෙස් දෙන විට --skip-worktree ප්‍රයෝජනවත් වේ
අර්ඩල් ජී.

4
DErdalG. හරියටම. ප්‍රශ්නයට අනුව, ඔවුන්ට අවශ්‍ය වන්නේ ගොනුවේ කිසියම් වෙනසක් නොසලකා හැර ගොනුව repo තුළ තබා ගැනීමයි
the_new_mr

_The_new_mr සමඟ එකඟ වන්න, ඒ --assume-unchangedහා --skip-worktreeසමාන බලපෑමක් ඇති නමුත් ඒවායේ අරමුණු සම්පූර්ණයෙන්ම වෙනස් වේ. පළමුවැන්න නම් විශේෂිත ලිපිගොනු පරික්ෂා නොකිරීමට git රවටා git කාර්ය සාධනය වේගවත් කිරීම සඳහා වන අතර දෙවැන්න ක්‍රියාත්මක වන නමුත් අත්‍යවශ්‍ය ලිපිගොනු සඳහා සුදුසු වන විශේෂිත ලිපිගොනු වල අනාගත වෙනස්කම් නොසලකා හැරීමයි .
වික්ටර් වොන්ග්

22

යම් කාලයක් ඉතිරි කර ගැනීම සඳහා ඔබ .gitignore වෙත එකතු කරන නීති බහු ගොනු / ෆෝල්ඩර ඉවත් කිරීම සඳහා භාවිතා කළ හැකිය

git rm --cached app/**/*.xml

හෝ

git rm --cached -r app/widgets/yourfolder/

යනාදිය


පියවරෙන් පියවර ගිටිග්නෝර් නිවැරදි කිරීමට ඔබට අවශ්‍ය ඕනෑම අවස්ථාවක මෙය ඉතා හොඳ විසඳුමකි
cutiko

16

Git මගින් ගොනුවක් අධීක්ෂණය කිරීම වැළැක්වීම

git update-index --assume-unchanged [file-path]

එය නැවත භාවිතා කිරීම සඳහා නැවත භාවිතා කරන්න

git update-index --no-assume-unchanged [file-path]

සමාන භාවිත අවස්ථා සඳහා යොමු කිරීම සඳහා වූ ප්‍රතිමූර්තියක් https://github.com/awslabs/git-secrets


9

බොහෝ අය ඔබට භාවිතා කිරීමට උපදෙස් දෙයි git update-index --assume-unchanged. ඇත්ත වශයෙන්ම, මෙය හොඳ විසඳුමක් විය හැකි නමුත් කෙටි කාලීනව පමණි.

ඔබට බොහෝ විට කිරීමට අවශ්‍ය වන්නේ මෙයයි : git update-index --skip-worktree.

(ඔබට බොහෝ විට අවශ්‍ය නොවන තුන්වන විකල්පය නම් : git rm --cached. එය ඔබගේ දේශීය ගොනුව තබාගනු ඇත, නමුත් දුරස්ථ ගබඩාවෙන් ඉවත් කළ ලෙස සලකුණු කරනු ඇත.)

පළමු විකල්ප දෙක අතර වෙනස?

  • assume-unchangedගොනුවකින් වෙනස් කිරීම් සැඟවීමට ඔබට තාවකාලිකව ඉඩ දීමයි. ඔබට ගොනුවකට කරන ලද වෙනස් කිරීම් සැඟවීමට, ගොනුව වෙනස් කිරීමට, පසුව වෙනත් ශාඛාවක් පරීක්ෂා කිරීමට අවශ්‍ය නම්, ඔබට භාවිතා කිරීමට සිදුවනු ඇත no-assume-unchanged.
  • skip-worktree ඔබගේ වෙනස් කිරීම් සමඟ ඔබ පිටවන ඕනෑම ශාඛාවක් ඔබ අනුගමනය කරනු ඇත!

නඩුව භාවිතා කරන්න assume-unchanged

මෙම ගොනුව වෙනස් නොකළ යුතු යැයි උපකල්පනය කරන අතර, එසේ කිරීමේදී ඔබට පිරිසිදු ප්‍රතිදානයක් ලබා දේ git status . නමුත් වෙනත් ශාඛාවකට පරික්ෂා කිරීමේදී, ඔබට ධජය නැවත සැකසීමට අවශ්‍ය වන අතර ඊට පෙර වෙනස්කම් සිදු කළ යුතුය. ඔබ මෙම විකල්පය සක්‍රිය කර ඇත්නම්, ඔබට ගැටුම් නිරාකරණය කළ යුතු අතර git ස්වයංක්‍රීයව ඒකාබද්ධ නොවේ. එය සැබවින්ම සඟවන්නේ වෙනස් කිරීම් පමණි (git status සලකුණු කළ ගොනු ඔබට නොපෙන්වයි).

මම ටික + සඳහා තැනූ වෙනස්කම් ගොනු (රෑනක් සිදු නතර කිරීමට පමණක් මම ඔබට අවශ්ය විට එය භාවිතා කිරීමට කැමති git commit -a) සම්බන්ධ කිරීම එම වෙනස් කිරීමකට .

නඩුව භාවිතා කරන්න skip-worktree

ඔබට පරාමිති අඩංගු සැකසුම් පන්තියක් ඇත (උදා: මුරපද ඇතුළුව) ඔබේ මිතුරන් ඔවුන්ගේ සැකසුම අනුව වෙනස් කළ යුතුය.

  • 1: මෙම පන්තියේ පළමු අනුවාදයක් සාදන්න, ඔබට පිරවිය හැකි ක්ෂේත්‍ර පුරවා අනෙක් අය හිස් / ශුන්‍යව තබන්න.
  • 2: කැපවී දුරස්ථ සේවාදායකයට තල්ලු කරන්න.
  • 3: git update-index --skip-worktree MySetupClass.java
  • 4: ඔබේ වින්‍යාස පන්තිය ඔබේම පරාමිතීන් සමඟ යාවත්කාලීන කරන්න.
  • 5: වෙනත් ක්‍රියාකාරීත්වයක් සඳහා නැවත වැඩට යන්න.

ඔබ කරන වෙනස් කිරීම් ශාඛාව කුමක් වුවත් ඔබව අනුගමනය කරනු ඇත. අවවාදයයි: ඔබේ මිතුරන්ටද මෙම පංතිය වෙනස් කිරීමට අවශ්‍ය නම්, ඔවුන්ට එකම සැකසුමක් තිබිය යුතුය, එසේ නොමැතිනම් ඔවුන්ගේ වෙනස් කිරීම් දුරස්ථ ගබඩාවට තල්ලු කරනු ඇත. අදින විට, ගොනුවේ දුරස්ථ අනුවාදය ඔබගේ නැවත ලිවිය යුතුය.

PS: එකක් හෝ වෙනත් දෙයක් කරන්න, නමුත් ඔබට නුසුදුසු අතුරු ආබාධ ඇති බැවින් දෙකම නොකරන්න. ඔබට වෙනත් ධජයක් උත්සාහ කිරීමට අවශ්‍ය නම්, ඔබ පළමුව දෙවැන්න අක්‍රිය කළ යුතුය.


7

ඔබගේ දේශීය ගොනුවේ / ෆෝල්ඩරයේ වෙනස්කම් නිරීක්ෂණය නොකරන ලෙස Git ට පැවසීමට (එයින් අදහස් වන්නේ git තත්ත්වය එහි වෙනස්කම් හඳුනා නොගනී), කරන්න:

git update-index --skip-worktree path/to/file

ඔබේ දේශීය අනුවාදයේ වෙනස්කම් නැවත වරක් නිරීක්ෂණය කිරීමට Git ට පැවසීමට (එවිට ඔබට වෙනස්කම් සිදු කළ හැකිය), කරන්න:

git update-index --no-skip-worktree path/to/file

1

එක් පේළියක පිළිතුර git update-index --assume-unchanged [path]

ඔබට සෙන්ට්‍රල් රෙපෝ හි ඇති ගොනුවක් ඇති විටත්, දේශීය රෙපෝ ලෙසත් මෙය භාවිතා කරන්න.ඔබට එම ගොනුවේ වෙනස්කම් කිරීමට අවශ්‍ය නමුත් වේදිකා ගත නොකළ යුතුය. මෙම ගොනුව ඇතුලත් නොකළ යුතුය.gitignore . පද්ධති පරිපාලකයින් විසින් ගොනුවේ නව වෙනස්කම් හඳුන්වා දී ඇති හෙයින්, ජ්‍යෙෂ් senior සංවර්ධකයින් සියළුම දේශීය ගබඩාවන් අතර බෙදා හැරිය යුතුය.

හොඳම උදාහරණය: DB සම්බන්ධතා සඳහා වින්‍යාස ගොනුව . මධ්‍යම repo එකක, නිෂ්පාදන DB සේවාදායකයක අගයන් සහිත සියලුම පරිශීලක නාමය, මුරපදය, සත්කාරක, වරාය ඔබට ඇත. නමුත් දේශීය dev හි, ඔබ භාවිතා කළ යුත්තේ දේශීය හෝ වෙනත් සංවර්ධන DB සේවාදායකයක් පමණි (ඔබේ කණ්ඩායම පිහිටුවා ඇති). මෙම අවස්ථාවේදී ඔබට වින්‍යාස ගොනුවේ වෙනස්කම් කිරීමට අවශ්‍ය නමුත් මධ්‍යම ප්‍රතිනිර්මාණය සඳහා කැප නොවිය යුතුය.

හොඳම


1

.Gitignore වර්තමාන / අනාගතයට යොදන්න

මෙම ක්‍රමය සම්මත .gitignore හැසිරීමට අදාළ වන අතර නොසලකා හැරිය යුතු ලිපිගොනු අතින් නියම කිරීම අවශ්‍ය නොවේ .

භාවිතා කළ නොහැක --exclude-from=.gitignoreතවදුරටත් : / - යාවත්කාලීන කළ ක්‍රමය මෙන්න:

සාමාන්‍ය උපදෙස්: පිරිසිදු රෙපෝ එකකින් ආරම්භ කරන්න - සෑම දෙයක්ම කැපවී ඇත, වැඩ කරන නාමාවලියෙහි හෝ දර්ශකයේ කිසිවක් ඉතිරිව නැත, උපස්ථයක් සාදන්න !

#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

#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *

#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.

git commit -m "re-applied modified .gitignore"

#other devs who pull after this commit is pushed will see the  newly-.gitignored files DELETED

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


0

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

ඔබට මෙම විධානය භාවිතා කළ හැකිය:

git rm -r -f /<floder-name>\*

ඔබ එම නාමාවලියෙහි මව් නාමාවලියෙහි සිටින බවට වග බලා ගන්න.
මෙම විධානය මඟින් බින් / හෝ බිල්ඩ් / ෆෝල්ඩරවල ඇති සියලුම ගොනු පුනරාවර්තනය වේ. මකන්න යන වචනයෙන් මා අදහස් කළේ එම ලිපිගොනු "මකා දැමූ" බව git මවා පෙන්වන අතර එම ලිපිගොනු ලුහුබැඳ නොයනු ඇත. Git ඇත්ත වශයෙන්ම එම ලිපිගොනු මකාදැමීමේ ක්‍රමයට සලකුණු කරයි.

ඔබගේ .gitignore ඉදිරි කටයුතු සඳහා සූදානම් කර ඇති බවට වග බලා ගන්න.
ප්‍රලේඛනය: git rm


0

මෙහෙයුම් අනුපිළිවෙල නිසා ගැටළුව ඇතිවිය හැකිය. ඔබ මුලින් .gitignore වෙනස් කළේ නම්, පසුව git rm --cached xxx, ඔබට මෙම ගැටළුව දිගටම මුහුණ දීමට සිදුවනු ඇත.

නිවැරදි විසඳුම

  1. git rm --cached xxx
  2. .gitignore වෙනස් කරන ලදි

ඇණවුම් වෙනස් කරන්න!

වෙනස් කිරීමෙන් පසු .gitignore නැවත පූරණය කරන්න!


0

මම උපකල්පනය කරන්නේ ඔබ එක් ගොනුවක් git tacking වලින් ඉවත් කිරීමට උත්සාහ කරන බවයි. ඒ සඳහා මම පහත විධානය නිර්දේශ කරමි.

git update-index --assume-නොවෙනස්ව

උදා - git update-index --assume-unchanged .gitignore .idea / compiler.xml


0

නාමාවලියක ඇති සියලුම ලිපිගොනු වල (කිසියම් වර්ගයක) යම් වෙනසක් නොසලකා හැරීම සඳහා, මට මෙම ප්‍රවේශයන් සමහරක් ඒකාබද්ධ කිරීමට සිදු විය, එසේ නොමැති නම් ගොනු කලින් නොතිබුණි නම් ඒවා නිර්මාණය කරන ලදි.

පහත දැක්වෙන පරිදි, "බැහැර කර ඇති" යනු වෙනස්කම් නැරඹීමට මා අකමැති නාමාවලියෙහි නමයි.

පළමුව, ඔබගේ වෙනස් කිරීමේ ෙසොයා ගැනීෙම් හැඹිලියෙන් (ඔබගේ ගොනු පද්ධතියෙන් ඉවත් නොකර) දැනට පවතින නව ගොනු ඉවත් කරන්න.

git status | grep "new file:" | cut  --complement -d " " -f1-4 | grep "^excludedir" | xargs git rm --cache

ඔබටත් එසේ කළ හැකිය modified:. නව ගොනු නාමය සඳහා ඔබට renamed:පෝස්ට් ->බිට් දෙස බැලිය යුතු අතර, පහත ->විස්තර කර ඇති deleted:පරිදි පෙර බිට් කරන්න .

deleted: දේශීය පද්ධතියේ නොපවතින ගොනුවක් සඳහා යාවත්කාලීන-දර්ශකයක් ඔබට නොපෙනෙන බැවින්, ගොනු ටිකක් සංකීර්ණ බව ඔප්පු කරයි

echo .deletedfiles >> .gitignore
git status | grep "deleted:" | cut  --complement -d " " -f1-4 | grep "^excludedir" > .deletedfiles
cat .deletedfiles | xargs -d '\n' touch
cat .deletedfiles | xargs -d '\n' git add -f
cat .deletedfiles | xargs -d '\n' git update-index --assume-unchanged
cat .deletedfiles | xargs -d '\n' rm

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

ඉන්පසු, එම නාමාවලියෙන් වෙනස්වීම් නිරීක්ෂණය කිරීම අවහිර කරන්න

git ls-files excludedir/ | xargs git update-index --skip-worktree
git update index --skip-worktree excludedir/

0

මෙම පිළිතුරෙහි පාහේ පාහේ විධාන රහිත ප්‍රවේශයක් ලබා දී ඇත :

සෑම දේශීය repo සඳහාම සමහර ගොනු නොසලකා හැරීම සඳහා :

  1. ගොනුවක් සාදන්න ~/.gitignore_global, උදාtouch ~/.gitignore_global ඔබේ පර්යන්තය තුළ.
  2. දුවන්න git config --global core.excludesfile ~/.gitignore_globalඑක් වරක් .
  3. ඔබට නොසලකා හැරීමට අවශ්‍ය ගොනුව / dir මාර්ග ලියන්න ~/.gitignore_global. උදා modules/*.H, එය ඔබගේ වැඩ කරන නාමාවලියෙහි ඇතැයි උපකල්පනය කෙරේ, එනම් $WORK_DIR/modules/*.H.

තනි දේශීය repo සඳහා සමහර ගොනු නොසලකා හැරීම සඳහා :

  1. .git/info/excludeRepo තුළ ඇති ගොනුව සඳහා ඉහත තුන්වන පියවර කරන්න , එනම් ඔබට නොසලකා හැරීමට අවශ්‍ය ගොනුව / dir මාර්ග ලියන්න .git/info/exclude. උදා modules/*.C, එය ඔබගේ වැඩ කරන නාමාවලියෙහි ඇතැයි උපකල්පනය කෙරේ, එනම් $WORK_DIR/modules/*.C.

-1

දිගු වේලාවක් සෙවීමෙන් පසු, මෙය කිරීමට ක්‍රමයක් සොයා ගන්න. පිටවීමේ .gitconfigශාඛාව වින්‍යාස ගොනුව ආපසු හැරවීමට පෙර සහ ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ ව්‍යාපෘතියේ මෙන් git විධානයක් අන්වර්ථ කරන්න sed. checkoutandmodifylocalproperties = !git update-index --no-skip-worktree local.properties && git checkout local.properties && git checkout $1 && git update-index --skip-worktree local.properties && sed -i '' 's/.*sdk.dir.*/sdk.dir=\\/Users\\/run\\/Library\\/Android\\/sdk/g' local.properties && :

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.