Git නොසලකා හරින ගොනු මාදිලිය (chmod) වෙනස් කරන්නේ කෙසේද?


2320

මා සතුව ව්‍යාපෘතියක් ඇත, එය chmodසංවර්ධනය කරන අතරතුර ලිපිගොනු මාදිලිය 777 දක්වා වෙනස් කළ යුතු නමුත් ප්‍රධාන ගබඩාවේ වෙනස් නොවිය යුතුය.

Git ඉහළට ගෙන chmod -R 777 .සියලු ගොනු වෙනස් කළ ලෙස සලකුණු කරයි. ලිපිගොනු වල සිදු කර ඇති Git නොසලකා හැරීමේ මාදිලියේ වෙනස්කම් කිරීමට ක්‍රමයක් තිබේද?


17
වින්ඩෝස් හි උබුන්ටු මත වින්ඩෝස් + බෑෂ් හි වැඩ කරන විට මෙය ප්‍රයෝජනවත් වේ
එලසාර්

4
හුදෙක් නිශ්චිත පිහිට පැතීමක් සඳහා අවසර වෙනස්කම් නොසලකා කිරීමට කැමති ඕනෑම කෙනෙකුට සඳහා git diff, එම නිසා ඔවුන්ගේ Git මානකරන ගොනු වෙනස් කිරීමට උවමනා නැත: ඔබ භාවිතා කළ හැකිය git diff -G.අනුව ශෙදකියා ගේ පිළිතුර මෙතන .
sampablokuper

Answers:


3841

උත්සාහ කරන්න:

git config core.fileMode false

සිට GIT-config (1) :

core.fileMode
    Tells Git if the executable bit of files in the working tree
    is to be honored.

    Some filesystems lose the executable bit when a file that is
    marked as executable is checked out, or checks out a
    non-executable file with executable bit on. git-clone(1)
    or git-init(1) probe the filesystem to see if it handles the 
    executable bit correctly and this variable is automatically
    set as necessary.

    A repository, however, may be on a filesystem that handles
    the filemode correctly, and this variable is set to true when
    created, but later may be made accessible from another
    environment that loses the filemode (e.g. exporting ext4
    via CIFS mount, visiting a Cygwin created repository with Git
    for Windows or Eclipse). In such a case it may be necessary
    to set this variable to false. See git-update-index(1).

    The default is true (when core.filemode is not specified
    in the config file).

මෙම -cධජය එක වරක් විධාන සඳහා මෙම විකල්පය නියම කිරීම සඳහා භාවිතා කල හැක:

git -c core.fileMode=false diff

හා --globalධජය එය පරිශීලක දී ලොගින් වී සඳහා සැකසුම් හැසිරීම විය වනු ඇත.

git config --global core.fileMode false

ගෝලීය සැකසුමෙහි වෙනස්වීම් පවත්නා ගබඩාවලට අදාළ නොවේ. මීට අමතරව, git cloneසහ git initසුවිශේෂව සකස් core.fileModeකිරීමට trueසාකච්ඡා ලෙස ප්රති config දී පරිගණක ක්රිඩාවට සමාන මත එක්කෝ කොබැඳි නැත්නම් ස්ථානීකව නොපවතියි ඉක්මවනු Git ගෝලීය core.fileMode බොරු

අවවාදයයි

core.fileModeහොඳම පුහුණුව නොවන අතර එය ප්‍රවේශමෙන් භාවිතා කළ යුතුය. මෙම සිටුවම මඟින් ක්‍රියාත්මක කළ හැකි බිට් මාදිලිය පමණක් ආවරණය වන අතර කිසි විටෙක කියවීම / ලිවීම නොකෙරේ. බොහෝ අවස්ථාවන්හීදී ඔබට මෙම සැකසුම අවශ්‍ය යැයි ඔබ සිතන්නේ ඔබ එවැනි දෙයක් කළ chmod -R 777නිසා ඔබේ ගොනු සියල්ලම ක්‍රියාත්මක කළ හැකි බැවිනි. නමුත් බොහෝ ව්‍යාපෘති වලදී බොහෝ ලිපිගොනු අවශ්‍ය නොවන අතර ආරක්ෂක හේතූන් මත ක්‍රියාත්මක කළ යුතු නොවේ .

මෙවැනි තත්වයක් විසඳීම සඳහා සුදුසුම ක්‍රමය වන්නේ ෆෝල්ඩරය සහ ගොනු අවසරය වෙන වෙනම හැසිරවීමයි.

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

ඔබ එය කරන්නේ නම්, core.fileModeඉතා දුර්ලභ පරිසරයක හැර , ඔබට කිසි විටෙක භාවිතා කිරීමට අවශ්‍ය නොවේ .


204
ඔබ එසේ කරන්නේ නම් ඔබට මෙය git config --global core.filemode falseකළ යුත්තේ එක් වරක් පමණි.
ග්‍රෙග්

13
මම නඩුව නිවැරදි කරන තුරු මෙය මට වැඩ කළේ නැත, එය ගොනු ප්‍රකාරය වෙනුවට ගොනු ප්‍රකාරය විය යුතුය
ටිෂ්මා

8
istishma: ප්‍රලේඛනය අනුව Git වින්‍යාස අංශය සහ විචල්‍ය නම් අකුරු සංවේදී නොවේ, වින්‍යාස ගොනුව බලන්න , එබැවින් ඉහත සඳහන් කරුණු ඔබ වෙනුවෙන් ක්‍රියාත්මක නොවූයේ නම් එය වෙනත් හේතුවක් නිසා විය.
ග්‍රෙග් හෙව්ගිල්

11
@donquixote: git configවිධානය මඟින් සැකසුම් නිවැරදි වින්‍යාස ගොනුවට ලියයි ( .git/configවත්මන් නිධිය සඳහා හෝ ~/.gitconfigභාවිතා කරන්නේ නම් --global).
ග්‍රෙග් හෙව්ගිල්

8
x zx1986: කමක් නැහැ. Git config වෙතින් : "විචල්ය නම් කේස්-සංවේදී නොවේ, ..."
ග්‍රෙග් හෙව්ගිල්

278

වැඩ කරන ගසෙහි ප්‍රකාර වෙනස් කිරීම අහෝසි කරන්න:

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x

නැතහොත් මින්ග්-ගිට් වල

git diff --summary | grep  'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x

42
OS X Lion හි, මෙය නීති විරෝධී තර්කයක් බැවින් (එය අවශ්‍ය නොවේ) -d'\n'කොටස ඉවත් කරන්න xargs.
පැස්කල්

9
"Chmod:` + x 'ට පසුව ක්‍රියා විරහිත වීම' පිළිබඳ කිසියම් දෝෂයක් ඔබට නොසලකා හැරිය හැකිය
කේසි වොට්සන්

5
මෙය යාවත්කාලීනද? මට 'chmod: ඕනෑවට වඩා තර්ක' mingw
hammett

7
@Pascal @pimlottc -d මඟින් ඕනෑම සුදු අවකාශයක් වෙනුවට නව රේඛාවක් ලෙස පරිසීමකය නියම කරයි. BSD xargs එම විකල්පය නැත, එහෙත් ඒ වෙනුවට, ඔබ තුළින් නල ප්රතිදානය හැකි tr '\n' '\0'පසුව භාවිතා -0පරිසීමක ලෙස NUL භාවිතා කිරීමට xargs කිරීමට arg.
මාර්ක් ඕෆ්ලික්

10
trනියමයි , වැඩේ වැඩ කළා! OSX සඳහා වන සම්පූර්ණ විධානය මෙන්න:git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 chmod -x
K.-Michael Aye

135

ඔබගේ සියලු ගබඩාවන් සඳහා මෙම විකල්පය සැකසීමට ඔබට අවශ්‍ය නම්, --globalවිකල්පය භාවිතා කරන්න .

git config --global core.filemode false

මෙය ක්‍රියාත්මක නොවන්නේ නම් ඔබ බොහෝ විට git හි නවතම අනුවාදයක් භාවිතා කරයි, එබැවින් --addවිකල්පය උත්සාහ කරන්න .

git config --add --global core.filemode false

--Global විකල්පය නොමැතිව ඔබ එය ක්‍රියාත්මක කරන්නේ නම් සහ ඔබේ වැඩ කරන නාමාවලිය repo නොවේ නම්, ඔබට ලැබෙනු ඇත

error: could not lock config file .git/config: No such file or directory

5
පසුව GIT භාවිතා වගේ --addදී මෙන්,git config --add --global core.filemode false
mgaert

14
Repo හි දේශීය වින්‍යාසය තුළ දැනටමත් filemode = true තිබේ නම්, ගෝලීය වින්‍යාසය ගෝලීය වින්‍යාසය අභිබවා යන බැවින් ගෝලීය වින්‍යාසය වෙනස් කිරීම උපකාරී නොවේ. යන්ත්‍රයේ එක් එක්
ගබඩාවේ

3
කරුණාකර: සයිඩ්රකිබ්ගේ අනතුරු ඇඟවීම සමඟ මෙම පිළිතුර යාවත්කාලීන කරන්න! මා එය සොයා ගැනීමට පෙර සෑම දෙයක්ම පිස්සු වැටී ඇති අතර පසුව පරිපූර්ණ අර්ථයක් ලබා දුන්නේය.
ජර්ක්ලාර්ක්

88

නම්

git config --global core.filemode false

ඔබ වෙනුවෙන් වැඩ නොකරයි, එය අතින් කරන්න:

cd into yourLovelyProject folder

cd .git ෆෝල්ඩරයට:

cd .git

වින්‍යාස ගොනුව සංස්කරණය කරන්න:

nano config

සත්‍යය අසත්‍යයට වෙනස් කරන්න

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

සුරකින්න, පිටවන්න, ඉහළ ෆෝල්ඩරයට යන්න:

cd ..

git එක නැවත සකසන්න

git init

ඔබ ඉවරයි!


11
සංස්කරණය කරනවා වෙනුවට .git/config, git config core.fileMode falseඔබේ ව්‍යාපෘතියේ මුලෙහි සරල එකක් ප්‍රමාණවත්ය. ඔබ වින්‍යාස ගොනුව සංස්කරණය කරන්නේ නම්, ඔබ එම නියෝගය මුළුමනින්ම ඉවත් කිරීමට වඩා හොඳය, එවිට ගෝලීය එක ලබා ගනී.
ෆීලික්ස්

6
-1 git config --global ක්‍රියා නොකරන්නේ නම් එයින් අදහස් වන්නේ ඔබට පද්ධති මට්ටමින් එය කිරීමට අවසර නොමැති බවයි, globalවිකල්පය ඉවත් කිරීම අතින් සංස්කරණය කිරීම හා සමාන දෙයක් කරයි .git / config
චාල්ස් බී

Har චාර්ල්ස් බී වැරදියි - පිළිතුර මඟින් විකල්පය කෙලින්ම ව්‍යාපෘතියට ඇතුළත් කිරීමෙන් එය ව්‍යාපෘති විශේෂිත වේ. මෙය අනාගතයේ දී ඔබ විසින් සිදුකරන / පිටවන වෙනත් git ව්‍යාපෘති සමඟ ක්‍රියා නොකරනු ඇත, නමුත් ඔබ වැඩ කරන ව්‍යාපෘතිය සඳහා ක්‍රියා කරයි. (අපි ~/.gitconfig~/project/.git/config
අපැහැදිලි

මෙය ක්‍රියාත්මක වූ පසු git initඅපි ගොනු ප්‍රකාරය සත්‍ය බවට සැකසිය යුතුද?
ජෝර්දාන්

53

ග්‍රෙග් හෙව්ගිල් පිළිතුරට එකතු කිරීම ( core.fileModeවින්‍යාස විචල්‍යය භාවිතා කිරීම ):

ඔබට භාවිතා කල හැකි --chmod=(-|+)xවිකල්පය GIT යාවත්කාලීන-දර්ශක එය ඔබ භාවිතා කරන්නේ නම් "-a සිදු Git" සිදු Git "(නොව ප්රගුණ කරන තැන සිට, එම දර්ශකය තුල අවසර ක්රියාත්මක වෙනස් කිරීමට (" GIT එකතු "පහළ මට්ටමේ අනුවාදය) ").


2
මෙය වෙනම පිළිතුරක් ලෙස එකතු කරනවාට වඩා ග්‍රෙග් හෙව්ගිල්ගේ පිළිතුරට සංස්කරණය කළ යුතුව තිබුණි.
ග්‍රෙග්

6
Reg ග්‍රෙග්: කෙනෙකුට තමන්ගේම පිළිතුරක් නොව සංස්කරණය කිරීමට ප්‍රමාණවත් කරුණු තිබිය යුතුය; මම හිතන්නේ ඒ අවස්ථාවේ අවසර සංස්කරණය කිරීමට මට ප්‍රමාණවත් නොවීය.
ජකුබ් නාරබ්ස්කි

1
Ak ජාකුබ් මම හිතන්නේ ඔබට දැන් හොඳ නමක් තිබේ :) උදාහරණ ගොනුවක් සඳහා මෙම විධානය මොන වගේද?
ඇලෙක්ස් හෝල්

38

ඔබට එය ගෝලීයව වින්‍යාසගත කළ හැකිය:

git config --global core.filemode false

ඉහත සඳහන් දෑ ඔබ වෙනුවෙන් ක්‍රියා නොකරන්නේ නම්, එයට හේතුව ඔබගේ දේශීය වින්‍යාසය ගෝලීය වින්‍යාසය අභිබවා යාමයි.

ගෝලීය වින්‍යාසය බලාත්මක කිරීම සඳහා ඔබේ දේශීය වින්‍යාසය ඉවත් කරන්න:

git config --unset core.filemode

විකල්පයක් ලෙස, ඔබේ දේශීය වින්‍යාසය නිවැරදි අගයට වෙනස් කළ හැකිය:

git config core.filemode false


4
ප්‍රධාන පිළිතුර ඔබට උදව් නොකළේ නම් - මෙය උත්සාහ කරන්න. ඔබගේ දේශීය වින්‍යාසය වෙනස් නොකර පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම්, පරීක්ෂා කරන්න git config -l(වත්මන් වින්‍යාසය ලැයිස්තුගත කරන්න - දේශීය හා ගෝලීය)
Krzysztof Bociurko

23

ඔබ දැනටමත් chmod විධානය භාවිතා කර ඇත්නම් ගොනුවේ වෙනස පරීක්ෂා කරන්න, එය පෙර ගොනු මාදිලිය සහ වත්මන් ගොනු මාදිලිය පෙන්වයි:

නව මාදිලිය: 755

පැරණි මාදිලිය: 644

පහත විධානය භාවිතා කර සියලුම ලිපිගොනු වල පැරණි මාදිලිය සකසන්න

sudo chmod 644 .

දැන් විධාන භාවිතා කරමින් හෝ අතින් භාවිතා කරමින් වින්‍යාස ගොනුවේ core.fileMode අසත්‍ය ලෙස සකසන්න.

git config core.fileMode false

වැනි සියලුම ලිපිගොනු වල අවසර වෙනස් කිරීමට chmod විධානය යොදන්න

sudo chmod 755 .

නැවත core.fileMode සත්‍ය ලෙස සකසන්න.

git config core.fileMode true

හොඳම භාවිතයන් සඳහා core.fileMode සෑම විටම ව්‍යාජ ලෙස තබා නොගන්න.


සමස්ත ව්‍යාපෘතියක් (සංවර්ධනය, වේදිකාගත කිරීම සහ නිෂ්පාදනය කිරීම) 755 ක් විය යුතු යැයි ඔබ පවසනවාද?
ඩැනියෙල්

An ඩැනියෙල් පෙබරවාරි: නැත. අවශ්‍ය ලිපිගොනු ක්‍රමය පමණක් වෙනස් කරන්න.
කිෂෝර් විටෙකාර්

For best practises don't Keep core.fileMode false alwaysඔබ අදහස් කරන්නේ කුමක්ද, ඔබ එය පැහැදිලි කළ යුතුයි.
bg17aw

For best practises don't Keep core.fileMode false always.සමහර ගොනු පද්ධති (උදාහරණයක් ලෙස FAT) ගොනු අවසරයන්ට සහය නොදක්වයි, එබැවින් මෙහෙයුම් පද්ධතිය පෙරනිමි අගයක් වාර්තා කරයි (කෙසේ වෙතත් මගේ පද්ධතියේ 766). මෙම අවස්ථාවෙහිදී, core.filemodeදේශීය වින්‍යාසය තුළ අත්‍යවශ්‍ය වේ, අනවශ්‍ය හා නොදැනුවත්ව අවසර වෙනස් කිරීම් සමඟ
බැඳීම් ඉතිහාසය පුපුරවා හැරීමට

එසේම, වර්‍ග නැවත වෙනස් කිරීමට ඔබ කරදර වන්නේ ඇයි? ඔබ සැකසූ core.filemode=falseවිට git මඟින් ක්‍රියාත්මක වන බිට් වෙනස්කම් නොසලකා හරිනු ඇත, දේශීය අවසර වෙනස් කිරීමට අවශ්‍ය නොවේ. ඔබ දැනටමත් දර්ශකයට අවසර වෙනස් කිරීම් එකතු කර නොමැති නම්, ඔබ ක්‍රියා විරහිත git addකිරීමෙන් පසු ඔබට අවශ්‍ය පියවර මඟ හැරී ඇත core.filemode.
කෙවින් ඕර්

18

පහත දැක්වෙන අන්වර්ථය නිර්වචනය කිරීමෙන් (~ / .gitconfig හි) ඔබට පහසුවෙන් git විධානයකට fileMode අක්‍රීය කළ හැකිය:

[alias]
nfm = "!f(){ git -c core.fileMode=false $@; };f"

මෙම අන්වර්ථය git විධානයට පෙර සැකසූ විට, ගොනු මාදිලියේ වෙනස්වීම් වෙනත් ආකාරයකින් පෙන්වන විධාන සමඟ නොපෙන්වයි. උදාහරණයක් වශයෙන්:

git nfm status

14

වින්‍යාස ගොනු වල ගොනු මෝඩය වැරදියට සැකසීමට ඔබට අවශ්‍ය නම් (උප මොඩියුලද ඇතුළුව): find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'


5
එම රේඛාව වින්‍යාස ගොනුවේ නොමැති නම් මෙය ක්‍රියා නොකරනු ඇත. ඔබට එය git submodule foreach git config core.fileMode false
උප මොඩියුල

4

සරල විසඳුම:

ව්‍යාපෘති ෆෝල්ඩරයේ මෙම සරල විධානයට පහර දෙන්න ( එය ඔබගේ මුල් වෙනස්කම් ඉවත් නොකරනු ඇත ) ... එය ඉවත් කරන්නේ ඔබ ව්‍යාපෘති ෆෝල්ඩරයේ අවසරය වෙනස් කරන අතරතුර සිදු කළ වෙනස්කම් පමණි.

විධානය පහතින්:

git config core.fileMode අසත්ය

මෙම සියලු අනවශ්‍ය ගොනුව වෙනස් කරන්නේ ඇයි: ඔබ ව්‍යාපෘති ෆෝල්ඩරයේ අවසරයන් ප්‍රශංසා sudo chmod -R 777 සමඟ වෙනස් කර ඇති නිසා ./yourProjectFolder

ඔබ නොකළ දේ වෙනස් කිරීම් පරීක්ෂා කරන්නේ කවදාද? git diff ගොනු නාමය භාවිතා කරන අතරතුර ඔබ පහත පරිදි හමු විය

old mode 100644
new mode 100755

1

මෙය මට වැඩ කරයි:

find . -type f -exec chmod a-x {} \;

හෝ ඔබේ මෙහෙයුම් පද්ධතිය මත පදනම්ව ආපසු හරවන්න

find . -type f -exec chmod a+x {} \;

1
මෙය ගොනුවේ අවසරයන් වෙනස් කරනු ඇත, නමුත් ගොනුවේ ගොනු අවසරයන් නොසලකා හැරීම git නොකරයි.
domdambrogia

හොඳයි, ඔබ හරි, එය නොසලකා හරින දෙයක් විසඳන්නේ නැත.
මාටින් වොලෙක්
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.