我有两个远程存储库。第一个(框架)被拉入第二个(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中时,如何覆盖框架库中的任何文件?
答案 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中的文件覆盖。