2016-07-27 44 views
0

我使用Git作为独奏开发者。我最近开始将我的项目推向私人回购的在线。当我创建一个新服务器时,我克隆了repo并运行我创建的任何安装脚本以启动并运行。修改文件后Git拉动。如何避免冲突?

安装脚本通常会更改某些目录。例如,cache目录需要具有允许写入文件的权限。有时我也会修改一个配置文件(尽管我已经开始将配置文件放在环境变量中),或者引入一些不属于项目一部分的内容映像。

当我对这些文件进行更改时,我不能再使用git pull来提取已更改的文件。如果我因冲突而做了git pull,Git会抱怨。

我试图找到一种方法,将允许我从本地推送到远程,并从远程git(私人github)拉到我的服务器。

可能吗?

+0

嗯,我建议将这些更改保留在回购之外,但如果您真的无法做到这一点,如果您的本地更改没有任何实际冲突,则存储> pull> pop通常会起作用。 – jonrsharpe

回答

0
git stash 

Git存储将您的更改置于存储状态。然后,你做:

git pull 

其中拉新的变化,那么:

git stash apply 

会带着您更改回。无论如何,你需要一个mergetool。我个人使用并推荐了PHPStorm MergeTool,我发现它非常易于使用,并且拥有出色的用户界面。

4

git stash,那么你所有的本地变化将被搁置,然后你就可以做git pull。 现在您已经获取了您计算机上的所有远程更改。 然后执行git stash apply重新应用您的配置更改。

1

在本地存储库中进行永久性未索引/未提交的配置更改并不是一个很好的解决方法(正如您所发现的那样)。

若要从根本上解决这个问题:

  • 有每一个环境配置文件。这可以(并且,除非它包含密码或其他秘密,应该)存储在存储库中(在这种情况下,将它们打包在具有单独名称的/config目录中),或者可以留在外面(然后你将只有一些存储库中的某种默认配置文件实际上并未“执行”)。
  • 运行脚本时,将它们指向正确的配置文件。例如,您可以通过使用配置文件名建立环境变量,或者通过在公共位置(如/etc/opt/...)或存储库内的符号链接(如config/localhost的忽略符号链接)来完成此操作。无论你做什么,你的代码都会知道选择哪个实际文件。

然后,您可以随时提交所有更改,并且来自不同环境的配置文件不会被视为一个(由于不同的文件名)。没有冲突等

0

从来没有git pull而是git fetch然后决定是否要合并或rebase在远程之上。通过这种方式,您始终将您的更改提交到本地回购以保证其安全。

为你描述的工作方式我会去每个服务器的本地分支。 我会推动远程只有你需要的变化。

所以在服务器上,你会拥有分支机构proj-localproj-remote-localproject-remote(也保持配置文件使用密码进行远程仓库,以保证他们的安全当前服务器上)。你在你的服务器上工作proj-local,如果你有变化,你想发布到所有服务器樱桃挑选他们并应用proj-remote-local然后你推到project-remote顶部。

另一件事是看看git ignore你想保留在本地的东西,这将使git不关心这些事情的变化,你只会在你关心的事情上工作。