如何防止您的内部项目文档在仍需要在本地跟踪时被推送到远程仓库?

How to prevent your internal project documentation from being pushed to remote repo while it still needs to be tracked locally?

我在 Whosebug 上看过类似的问题,但 none 非常满足需要。 使用 gitignore 不会让我跟踪文档的更改。 使用子模块,同样不会成为主仓库的一部分,必须单独提交。

另一个类似的问题可能是是否完全有可能使用 git 仅在您推送时排除一些 files/folders。

为了更清楚,我有一个项目说 project

项目

|_codefolder1/

|_codefolder2/

|_codefile1

|_etc

|_docs/

我想要的是根本不将 docs/ 推送到生产或测试服务器。但我仍然想继续更改和跟踪文档,因为将特定文档与产品的特定版本联系起来很重要。

是否有任何解决方法,或者我是否缺少 git 的某些内置功能?

你不知道。

Another similar question might be if it is at all possible using git to exclude some files/folders only when you push.

你不能。

当您 运行 git push 时,该操作不会将 文件 发送到另一个 Git 存储库。该操作将 提交 发送到另一个存储库。

每个提交都包含 每个 文件的完整快照,例如存档(tar 或 rar 或 winzip 或其他)。更准确地说,每个提交都包含它所包含的所有文件:它要么有一些文件——docs/foo.txt——要么没有。 (提交不包含文件夹,仅包含文件:文件的名称中可能包含正斜杠,并且 Git 知道 OS 需要存储名为 docs/foo.txt 的文件需要 Git 创建一个名为 docs 的文件夹,然后在该文件夹中存储一个名为 foo.txt 的文件,但就 commit 而言,它只是一个 文件 名为 docs/foo.txt.)

如果文件在 Git 的索引中,则该文件被 跟踪。如果它不在 Git 的索引中,它就是 untracked。当您 select 一个 不同的 提交签出时,Git:

  • 从其索引和您的工作树中删除来自 当前 提交的跟踪文件;
  • 将来自新 selected 提交的文件安装到它的索引和您的工作树中:这些现在是被跟踪的文件;和
  • 使新的 selected 提交(和分支名称,如果你 select 通过分支名称编辑它)当前提交(和分支名称)。

当您构建 新提交 时,Git 获取所有 跟踪的文件 ——它的所有副本索引——并使用它来为新的提交创建存档。因此,新提交中的文件集正是被跟踪的文件,因为它们出现在 Git 的索引中(不一定是它们出现在你的工作树中:如果你没有 git add 一些更新副本,索引副本为旧版本)。

因此,如果文件已提交,则它们会已跟踪。如果他们没有被跟踪,他们就没有承诺。 git push 操作推送提交。这就是 Git 中的全部内容:这就是你得到的全部内容。

(这就是为什么存在子模块,以及 Google 的 等系统的原因。)