在Git中将一个提交保留在本地以供克隆

3
我有两个代码库。我在本地开发机上启动了一个项目,后来将其克隆到客户服务器上的测试环境中。我模拟了客户服务器上的环境,但为此需要有一些文件(以及其他一些文件中的一些行)仅存在于我的本地计算机上,但不能出现在远程环境中。
我在克隆项目并提交这些更改(在远程代码库的单个提交中)之后删除了这些文件和行,但在推送(回到源代码库)之后,我必须在本地代码库中忽略此提交。我希望两个代码库保持同步,除了这个单独的提交,这样该项目就可以在两个略微不同的环境中运行。
如何做到这一点?如何在推送/拉取后在本地忽略提交而不影响远程代码库中的提交?
4个回答

2

好吧,也许我可以不追踪那些额外的文件。已更改的文件...该死,有一个带有路径的.htaccess文件,我必须完全取消跟踪它,因为我无法拆分它。 难道没有任何方法使某些更改“私有”,以便它们不会被推送到另一个克隆?还是我必须提出功能请求? - craesh

1

正如@ben-james所回答的那样,如果可以的话,请将文件从git中排除。如果不能排除,则有两种解决方案,具体取决于您的开发模型。(第二种解决方案可推广到任何为每个开发人员定制提交的开发团队。)

  1. 如果你总是在本地提交代码,而客户端只拉取不提交或推送:假设更改已经提交,请使用git revert在本地机器上撤销提交。然后,在远程客户端上进行pull并再次运行git revert以重新执行仅限客户端的更改。永远不要从客户端推送。您可以继续使用git pull --rebase更新客户端,以避免冗余合并提交的增长轨迹。

  2. 如果你需要在本地机器上提交代码,并且需要在远程客户端上提交代码:有一种简单但麻烦的方法可以解决这个问题。每次推送/拉取时,您可以通过变基来保持提交本地。

    • 使用git pull --rebase拉取
    • 在推送之前,使用git rebase -i <LOCAL_COMMIT>将本地提交重新排序为最近的提交
    • 使用git push origin master~:master推送除本地(现在是最后一个)提交之外的所有内容

1

你可以创建一个分支来包含你的本地修改,如何?


保持一个单独的分支意味着每次推送/拉取后都需要变基。我希望有一个更简单的解决方案。 - craesh

0
通常,对于配置文件,您在仓库中保存一个模板配置文件,以及一个脚本,能够根据当前环境/平台生成一个“私有”(即不被版本控制的)配置文件,并带有正确的值。
这样,您就不必处理任何“条件性”提交。
另请参阅 SO 问题 "如何跟踪Git中子模块的配置文件?" 注意:我意识到您不一定是在谈论特定的配置文件,但这仍然可以给您如何管理类似文件的想法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接