从推拉中排除文件
exclude files from pushing and pulling
我有一个远程存储库,它被镜像到一个开发站点并下载到我的本地机器上使用。当我推送更改时,他们会通过挂钩更新网站。
更新
我需要的东西:
存储库包含整个项目,开发站点的工作 "configuraion.php"(用于测试的工作在线资源);
任何开发人员都可以拉取项目并将 configuration.php 中仅有的两个路径变量更改为 运行 ;
之后这个文件不应该提交到存储库,并且在拉取更改时不应该被覆盖。
但是我从存储库中提取错误。
我试过:
- 下载项目
git update-index --assume-unchanged configuration.php
- 更改了文件,当时似乎没问题
但是当我尝试从存储库中提取更改(由其他人所做的)时,我得到以下信息:
error: Your local changes to the following files would be overwritten by merge:
configuration.php
Please, commit your changes or stash them before you can merge.
Aborting
尝试添加到 ".git/info/exclude"
但没有明显效果。
我做错了什么?
难不成文件configuration.php
还在被其他人跟踪?如果是这样,那么您的远程存储库将包含此文件,当您执行 git pull
Git 时,将尝试将此文件放入本地存储库。尽管您已取消跟踪该文件,Git 似乎正试图从远程导入它。
更新:
在 Git 的模型中忽略远程文件没有意义。因此,如果您坚持维护远程存储库中的configuration.php
文件,那么您不应在本地设置中使用该文件。一个简单的解决方法是保留一个不同的本地 PHP 配置文件(例如 configurationLocal.php
)和 运行 用于本地测试。
所以你的工作流程可能是这样的:
git pull
将获取最新的 configuration.php
文件
- 复制
configuration.php
到configurationLocal.php
- 将
configurationLocal.php
添加到您的 .gitignore
文件,这样它就永远不会被跟踪
- 使用
configurationLocal.php
进行所有单元测试等
在对 git pull
的后续调用中, 可能 与 configuration.php
发生冲突,但这无关紧要。如果发生冲突,您可以简单地接受服务器的版本,然后根据需要更新您的 configurationLocal.php
脚本。
项目需要配置文件是很常见的。但是提供一个示例文件也很常见,该文件为标准配置提供了很好的信息。
您可以将此文件命名为 configuration.php.sample
,并将此文件复制到 configuration.php
并更改文件中需要更改的信息。
如果可以读入信息来补充这些信息,那么也许指令创建一个'local_config.php`。
在任何一种情况下,配置文件都不会在存储库中被跟踪,但样本会。这允许更新信息,而根本不会跟踪本地更改的文件。
否则,如果您对不想被推送的文件进行了更改,则可以隐藏您的更改(这是一个很好的论据,不使用 git add .
并负责指示您希望每次添加的文件)做您的存储库更改,以及您的推送和拉取,然后执行 git stash pop
以恢复您的特定本地更改。
来自 git 的有用消息甚至建议您将其藏起来。它可能就像这样做一样简单,如果您想要的是您独有的,而不是您项目中的所有开发人员,那么就可以得到您想要的东西。
我有一个远程存储库,它被镜像到一个开发站点并下载到我的本地机器上使用。当我推送更改时,他们会通过挂钩更新网站。
更新 我需要的东西: 存储库包含整个项目,开发站点的工作 "configuraion.php"(用于测试的工作在线资源); 任何开发人员都可以拉取项目并将 configuration.php 中仅有的两个路径变量更改为 运行 ; 之后这个文件不应该提交到存储库,并且在拉取更改时不应该被覆盖。
但是我从存储库中提取错误。 我试过:
- 下载项目
git update-index --assume-unchanged configuration.php
- 更改了文件,当时似乎没问题
但是当我尝试从存储库中提取更改(由其他人所做的)时,我得到以下信息:
error: Your local changes to the following files would be overwritten by merge:
configuration.php
Please, commit your changes or stash them before you can merge.
Aborting
尝试添加到 ".git/info/exclude"
但没有明显效果。
我做错了什么?
难不成文件configuration.php
还在被其他人跟踪?如果是这样,那么您的远程存储库将包含此文件,当您执行 git pull
Git 时,将尝试将此文件放入本地存储库。尽管您已取消跟踪该文件,Git 似乎正试图从远程导入它。
更新:
在 Git 的模型中忽略远程文件没有意义。因此,如果您坚持维护远程存储库中的configuration.php
文件,那么您不应在本地设置中使用该文件。一个简单的解决方法是保留一个不同的本地 PHP 配置文件(例如 configurationLocal.php
)和 运行 用于本地测试。
所以你的工作流程可能是这样的:
git pull
将获取最新的configuration.php
文件- 复制
configuration.php
到configurationLocal.php
- 将
configurationLocal.php
添加到您的.gitignore
文件,这样它就永远不会被跟踪 - 使用
configurationLocal.php
进行所有单元测试等
在对 git pull
的后续调用中, 可能 与 configuration.php
发生冲突,但这无关紧要。如果发生冲突,您可以简单地接受服务器的版本,然后根据需要更新您的 configurationLocal.php
脚本。
项目需要配置文件是很常见的。但是提供一个示例文件也很常见,该文件为标准配置提供了很好的信息。
您可以将此文件命名为 configuration.php.sample
,并将此文件复制到 configuration.php
并更改文件中需要更改的信息。
如果可以读入信息来补充这些信息,那么也许指令创建一个'local_config.php`。
在任何一种情况下,配置文件都不会在存储库中被跟踪,但样本会。这允许更新信息,而根本不会跟踪本地更改的文件。
否则,如果您对不想被推送的文件进行了更改,则可以隐藏您的更改(这是一个很好的论据,不使用 git add .
并负责指示您希望每次添加的文件)做您的存储库更改,以及您的推送和拉取,然后执行 git stash pop
以恢复您的特定本地更改。
来自 git 的有用消息甚至建议您将其藏起来。它可能就像这样做一样简单,如果您想要的是您独有的,而不是您项目中的所有开发人员,那么就可以得到您想要的东西。