保持本地提交以在Git中克隆

时间:2010-03-02 18:31:50

标签: git clone commit

我有两个存储库。我在我的开发机器上本地启动了一个项目,之后将其克隆到客户服务器上的测试环境中。我模仿客户服务器上的环境,但为此我需要将一些文件(以及其他一些文件中的某些行)仅存在于我的本地计算机上,但它们不得出现在远程环境中。

我克隆了项目之后删除了这些文件和行,并在远程存储库中的单个提交中提交了这些更改,但是在推送(返回原始存储库)之后,我将不得不忽略此提交本地存储库。我希望两个存储库同步,除了这个单一的提交,所以项目会 在两个略有不同的环境中运行。

我该怎么做?在推/拉后,如何在不在远程仓库上更改它的情况下忽略本地提交?

4 个答案:

答案 0 :(得分:2)

简单的答案是不要在版本控制中保留任何特定于机器的内容,或者至少将机器特定的提交保留在文件中,这些文件是应用程序实际使用的文件的副本或模板。

请参阅:Is there a way to make TortoiseSVN temporarily ignore versioned files?

答案 1 :(得分:1)

如何创建包含本地更改的分支?

答案 2 :(得分: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以推送除本地(现在最后一次)提交之外的所有内容

答案 3 :(得分:0)

通常,对于配置文件,您在repo中保留一个模板配置文件,以及一个能够生成具有正确值的“私有”(即非版本化)配置文件的脚本,具体取决于当前的环境/平台。

这样,您就不必处理任何“条件”提交。

另见SO问题“How to track config files of submodules in Git?

注意:我意识到你本身并不一定在谈论 config 文件,但这仍然可以让你了解如何管理类似的文件。