Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用新模式将仅Git文件添加到Git?_Git_Chmod - Fatal编程技术网

如何使用新模式将仅Git文件添加到Git?

如何使用新模式将仅Git文件添加到Git?,git,chmod,Git,Chmod,Git可以跟踪文件的模式(如755或644)。我对所有工作文件的chmod进行了全局更新,但只有部分文件的chmod不好。现在我有了一个混合的更新文件:一些是我以前更新过的新代码,另一些只是新模式。 如何向Git中仅添加具有新模式的文件 在Git文档中,我找到了一个,但我不确定它对我的情况是否有用。您可以更改所有文件的模式,然后执行Git添加。 由于git只跟踪更改的内容,所以它只会添加模式已更改的文件 请注意,这适用于正确跟踪可执行位(git跟踪的唯一模式)的文件系统。在windows上,您可

Git可以跟踪文件的模式(如755或644)。我对所有工作文件的chmod进行了全局更新,但只有部分文件的chmod不好。现在我有了一个混合的更新文件:一些是我以前更新过的新代码,另一些只是新模式。 如何向Git中仅添加具有新模式的文件


在Git文档中,我找到了一个,但我不确定它对我的情况是否有用。

您可以更改所有文件的模式,然后执行
Git添加。
由于git只跟踪更改的内容,所以它只会添加模式已更改的文件


请注意,这适用于正确跟踪可执行位(git跟踪的唯一模式)的文件系统。在windows上,您可能需要使用链接的
--chmod
选项。

除了在某些windows系统上,简单的答案就是使用工作树顶层的
git add.
git add-u
。重新添加已添加的文件是无害的;重新添加现有文件也会选择其新的模式设置

有关索引/暂存区域的更多信息 作为练习,运行以下命令:

git ls-files --stage
在已签出一组文件的现有存储库上。(这会在大型存储库中打印大量输出,默认情况下不使用寻呼机,因此您可能希望添加
|page
|less
或您为分页所做的任何操作。)

此列表的结果将告诉您下一次提交中将包含的所有文件。如果在此
git ls files
命令之后立即运行
git commit
,您将获得一个新的commit,其中正好包含由
git ls files
列出的文件集,模式信息由
--stage
显示(作为第一列)

将输出与git status的输出进行比较:

$ git ls-files --stage | wc -l
    3606
有超过三千六百个文件准备提交!但是:

$ git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean
为什么这些不同?为什么
git status
报告没有任何暂存文件,而
git ls files
报告3606个暂存文件

答案是,
主文件的当前提交提示具有相同的3606文件:

$ git ls-tree -r HEAD | wc -l
    3606
此外,
HEAD
commit中的3606文件与索引/暂存区域中的3606文件具有相同的模式、大小和数据字节。所以比较这两个的
git status
,说它们没有什么不同,也没有什么可提交的

如果通过更改工作树中的副本来更改索引/暂存区域中的一个文件,或者仅仅更改模式,则暂存区域中仍将有3606个文件,但这一次,其中一个文件将有所不同。
git ls files
命令将列出所有3606;
git status
命令将列出不同的文件。以下哪一项在日常工作中更有用


索引/暂存区域保存每个文件的副本,准备进入下一次提交。这也是模式始终
100755
100644
的来源。无论索引/暂存区域中有什么内容,都是在运行
git commit
时提交的内容。您必须运行
git add
的原因是告诉git:从工作树副本更新索引副本。

您可以尝试使用
--chmod=+x
git status
显示了什么?听起来您可以只
隐藏
,再次运行模式更改命令,提交,然后弹出隐藏文件。@wjandrea
git status
向我显示一组修改过的文件:code和chmod。我的问题是如何在下次提交时只添加chmod修改的文件。在我的chmod更新之前,
git隐藏
会很好,但现在太晚了,所有文件都混合在一起,所以可能存在一个相反的解决方案:git只隐藏代码修改过的文件?@Klemart3D怎么会太迟?我是说隐藏,再次进行模式更改,提交,弹出隐藏。A
git add.
添加所有修改的文件:类似chmod的代码。我只想用一个新的chmod(不是chmod更新之前修改的代码文件)添加下一个提交文件。请检查@wjandrea对您的问题的评论。您可以始终隐藏非模式修改,并在模式更改提交后将其弹出。我希望你不要有太多的修改过的文件使手动隐藏它们变得不可行。我有太多的修改过的文件,我无法从视觉上区分(使用
git状态
)文件代码修改过的文件chmod modified(可能有些文件也有代码+chmod修改),这就是为什么我要问是否存在自动化解决方案:)