yii 如何忽略未合并的路径?

ibrsph3r  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(150)

目前我使用的是yii,我使用的是git center仓库,比如说在开发中config被设置为localhost,在生产服务器中config被设置为server ip。
我修改了需要提交的文件

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   backend/modules/company/controllers/XyzController.php

当我提交时,我得到错误

U       backend/config/main.php
U       frontend/config/main.php
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

这里是Unmerged paths

Unmerged paths:
  (use "git reset HEAD <file>..." to unstage)
  (use "git add <file>..." to mark resolution)

        both modified:   backend/config/main.php
        both modified:   frontend/config/main.php

因为当我从中心存储库提取时,它与生产服务器配置冲突。
我已经在.gitignore中包含了backend/config/main.phpfrontend/config/main.php,但是没有效果。
如何解决这个问题,以便只提交XyzController.php并推送到远程?
如果我提交backend/config/main.phpfrontend/config/main.php,那么它将包括在push中。并且它认为当我在生产服务器中从中心库拉取时它将冲突。
先谢谢你。

qpgpyjmq

qpgpyjmq1#

  • unmerged path* 表示您运行了git merge或等效的git merge,它试图合并对该文件的两组不同的更改,但失败了。

这意味着 * 你 * 现在必须合并文件中的两组修改。Git会在你的工作树中留下它最大的努力来合并这两组修改,但是Git很确定它留下的是 * 不正确的 *。然后你提到:
假设在开发中,config设置为localhost,而在生产服务器中,config设置为server ip...
如果冲突发生在配置文件中的IP地址上,那么Git是正确的:它就不能适当地解决冲突。
危险在于,通过将这些文件作为版本控制文件放入,未来的git merge操作将认为它 * 已经 * 正确地解决了合并,而实际上,它放入了错误的IP地址。

**配置文件不应该是版本控制的。**请参阅Committing Machine Specific Configuration Files以获得一个很好的方法。还有其他方法;例如,您可以提交config.sample而不是config.php,并将config.php作为一个忽略的文件,每个用户都必须基于版本控制的config.sample来编写该文件。

然而,与此同时,你仍然需要清理现有的混乱。合并冲突的发生是因为这两个文件 * 已经是版本控制的 *。除非版本控制是你自己的错误,作为你刚刚所做的一个更改的一部分-这似乎是不可能的1-你应该作为一个单独的操作(独立于其他更改)撤销版本控制。
因此,您可以使用此程序:在编辑器中打开两个冲突的文件backend/config/main.phpfrontend/config/main.php,仔细检查配置。根据需要修复它们,并保存结果。然后使用以下命令:

git add backend/config/main.php
git add frontend/config/main.php

将修正后的版本放到适当的位置。很可能它们现在 * 匹配 * 了当前分支上以前的版本,所以git status将不再显示它们。(如果git status * 没有 * 显示它们,请使用git diff --cached查看您所做的更改。)无论如何,这将在索引中将这两个文件标记为完全解析。现在您可以进行新的提交。如果这两个配置文件与当前(HEAD)commit,那么在新的commit中唯一 * 改变 * 的将是文件backend/modules/company/controllers/XyzController.php
(记住,一个提交有 * 每个 * 提交文件的一个完整快照。你 * 下一次 * 提交是基于当前索引中的任何内容,也就是你git add所做的任何内容。一旦你提交了,新的HEAD提交和索引现在是匹配的,所以git status表示没有什么可提交的。
为了产生合并冲突,文件必须同时存在于两个提示提交中,或者同时存在于合并基础提交和一个提示提交中,或者同时存在于三个提交中。请记住,每个文件的三个版本都可以合并:

  • merge base 版本,即在任一分支开始发散之前就已存在的版本;
  • --ours版本,即HEAD提交中的版本;和
  • --theirs版本,这是另一个分支tip中的版本。

如果你错误地添加了一个配置文件到你的分支,但是它不在基版本中,也不在--theirs中,这不会有冲突。因此,它至少应该在另外两个提交中的一个中。假设你没有自己写基版本,也没有做另一个分支端提交。如果是这样的话,您不可能一开始就造成这个配置文件现在是版本控制的问题。

djmepvbi

djmepvbi2#

您只能使用您的文件、文件夹和文件夹。

$ git add backend/modules/company/controllers/XyzController.php
$ git commit -m 'Added XyzController'
$ git push origin HEAD

如果backend/config/main.phpfrontend/config/main.php文件中发生冲突,则解决冲突,添加,提交。
如果你想保留你对文件所做的更改,那么在拉的时候接受ours

$ git pull origin <branch> -s recursive -X ours    # accept your changes
92dk7w1h

92dk7w1h3#

如果由于git stash pop而导致路径未合并,则可以手动解决该文件上的冲突,然后执行git reset filename

相关问题