GIT:chmod到一个文件夹显示为一个更改,但我不想将其提交到远程[duplicate]

um6iljoc  于 2022-12-17  发布在  Git
关注(0)|答案(1)|浏览(124)

此问题在此处已有答案

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

我不想提交这些特定的更改。

j9per5c4

j9per5c41#

通过递归地将目录 * 和文件 * 更改为0777模式,你就打开了所有文件的可执行位,git会尽职尽责地尝试记录。
你不可能轻易让git忽略这些权限更改--至少,如果不放弃git完全“理解"文件系统的可执行权限位的能力,你是无法做到的。
将目录和文件设置为全域可写有点代码味道,老实说,我会尝试找到一种更细粒度、更轻松的方法来实现这一点。
首先,您可以让umask为您完成繁重的工作--这可能是最简单的解决方案。您的umask通知如何创建新文件。运行umask -S查看当前设置我的是022u=rwx,g=rx,o=rx,这意味着如果新文件不可执行,则将以0755 * 或 * 0644模式创建。
将您的umask设置为0意味着将使用0777模式创建目录,常规文件为0666,可执行文件为0777

(umask 0 && git clone git@github.com:ethomson/test)

我们把它放在圆括号中((...)),因为这将启动一个子shell,你的umask 0只会持续到子shell,这意味着它只会影响git clone命令,而不会影响你在子shell之后运行的东西。
如果您查看克隆的test存储库,文件夹模式将为0777,常规文件模式将为0666,可执行文件模式将为0777
使用umask可能是最简单的选择 * 总的来说 ,但是你需要你的umask0来执行所有写文件的git操作。
但是,如果这样做太麻烦,您可以在事后使用修改过的chmod
chmod -R 0777 <directory>会将给定目录和所有子目录设置为完全可读、可写和 seekable。它会将该目录和子目录中的所有文件设置为完全可读、可写和 executable
您可能希望使用前者--您希望目录的模式为0777,但您可能不需要后者--我不知道您的确切工作流,但您可能只需要它们是0666(意味着全局可写)。
如果有必要--同样,这感觉非常多。*
相反,您可以将所有目录设置为0777--find,使用-type d选项将查找所有 * 目录 *。

find /storage -type d -exec chmod 0777 {} \;

同时使所有文件完全可写--首先,将可执行文件设置为0777,然后将不可执行文件设置为0666

find /storage -type f -perm -100 -exec chmod 0777 {} \;
find /storage -type f \! -perm -100 -exec chmod 0666 {} \;

第一个命令将找到设置了用户写入位(-perm -100)的所有文件(-type f),然后将对它们进行chmod;第二个命令将查找 * 不 * 具有用户写入位设置(\! -perm -100)和chmod them 的所有文件。

相关问题