此问题在此处已有答案:
How do I make Git ignore file mode (chmod) changes?(14个答案)
4天前关闭。
我必须编辑两个文件夹的文件权限,以获得CMS在我的本地机器上工作。但我不想提交这些更改到远程。我的大多数搜索出现的解决方案指向添加文件到gitignore文件,这不是我想要的。
我所做的改变是:
chmod -R 777 /web
chmod -R 777 /storage
Git状态显示为:
modified: storage/.gitkeep
modified: storage/rebrand/icon/lg_b2.svg
modified: storage/rebrand/icon/lg_b3.svg
modified: web/.htaccess
modified: web/index.php
modified: web/web.config
我不想提交这些特定的更改。
1条答案
按热度按时间j9per5c41#
通过递归地将目录 * 和文件 * 更改为
0777
模式,你就打开了所有文件的可执行位,git会尽职尽责地尝试记录。你不可能轻易让git忽略这些权限更改--至少,如果不放弃git完全“理解"文件系统的可执行权限位的能力,你是无法做到的。
将目录和文件设置为全域可写有点代码味道,老实说,我会尝试找到一种更细粒度、更轻松的方法来实现这一点。
首先,您可以让
umask
为您完成繁重的工作--这可能是最简单的解决方案。您的umask
通知如何创建新文件。运行umask -S
查看当前设置我的是022
或u=rwx,g=rx,o=rx
,这意味着如果新文件不可执行,则将以0755
* 或 *0644
模式创建。将您的
umask
设置为0
意味着将使用0777
模式创建目录,常规文件为0666
,可执行文件为0777
。我们把它放在圆括号中(
(...)
),因为这将启动一个子shell,你的umask 0
只会持续到子shell,这意味着它只会影响git clone
命令,而不会影响你在子shell之后运行的东西。如果您查看克隆的
test
存储库,文件夹模式将为0777
,常规文件模式将为0666
,可执行文件模式将为0777
。使用
umask
可能是最简单的选择 * 总的来说 ,但是你需要你的umask
是0
来执行所有写文件的git操作。但是,如果这样做太麻烦,您可以在事后使用修改过的
chmod
。chmod -R 0777 <directory>
会将给定目录和所有子目录设置为完全可读、可写和 seekable。它会将该目录和子目录中的所有文件设置为完全可读、可写和 executable。您可能希望使用前者--您希望目录的模式为
0777
,但您可能不需要后者--我不知道您的确切工作流,但您可能只需要它们是0666
(意味着全局可写)。 如果有必要--同样,这感觉非常多。*相反,您可以将所有目录设置为
0777
--find
,使用-type d
选项将查找所有 * 目录 *。同时使所有文件完全可写--首先,将可执行文件设置为
0777
,然后将不可执行文件设置为0666
:第一个命令将找到设置了用户写入位(
-perm -100
)的所有文件(-type f
),然后将对它们进行chmod;第二个命令将查找 * 不 * 具有用户写入位设置(\! -perm -100
)和chmod them 的所有文件。