从远程存储库覆盖本地更改

时间:2014-09-06 20:12:04

标签: git merge repository

我有两个远程存储库。第一个(框架)被拉入第二个(MySite)。我对MySite进行了一些更改,例如CSS,并将其全部推送到MySite仓库。

现在,如果我(或其他开发人员)在MySite仓库中更改PHP文件,例如User.php(存储在Framework repo上),并将Framework repo拉入MySite,User.php文件需要使用Framework repo上的文件覆盖。

这是我的本地git配置:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "MySite"]
    url = username@domain.com:mysite
    fetch = +refs/heads/*:refs/remotes/MySite/*
    gtPrivateKeyPath = /Users/MY_MAC_USER/.ssh/my_key
    sslVerify = true
[branch "master"]
    remote = MySite
    merge = refs/heads/master
[remote "Framework"]
    url = username@ domain.com:framework
    fetch = +refs/heads/*:refs/remotes/Framework/*
    gtPrivateKeyPath = /Users/MY_MAC_USER/.ssh/my_key
    sslVerify = true

Framework repo的文件夹结构:

application/
    modules/
      User/
          User.php
public/
    images/
    themes/
        default/
          css/
settings.php.sample
tmp/

MySite repo的文件夹结构

application/
    modules/
      User/
          User.php
public/
    images/
    themes/
        default/
          css/
        MySite_Theme/
          css/
settings.php
settings.php.sample
tmp/

当我拉动Framework时,它没有做任何事情(除非在Framework上更改了文件。

是因为MySite是第一个列出的回购?

当如何将框架内的文件覆盖到MySite中时,如何覆盖框架库中的任何文件?

1 个答案:

答案 0 :(得分:1)

在您描述的场景中,Framework repo通常被称为upstream repo。为了更新MySite仓库,从Framework repo获取更改并覆盖冲突文件中的任何更改,这些命令应该这样做:

$ git checkout master  # make sure you're on your master branch in MySite
$ git fetch Framework
$ git merge -s recursive -X theirs Framework/master

这将从Framework repo中获取更改,并且合并期间发生冲突的任何文件都将被Framework中的文件覆盖。