我正在与另外两名团队成员使用 FuelPHP 框架开发一个网站。我想使用 git 来维护项目,但我在配置方面遇到了一些麻烦。当我使用oil安装FuelPHP时,它会安装主框架以及来自github的几个子模块。文档根目录中的 .git/config 文件如下所示:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git://github.com/fuel/fuel.git
[branch "1.4/master"]
remote = origin
merge = refs/heads/1.4/master
[submodule "docs"]
url = git://github.com/fuel/docs.git
[submodule "fuel/core"]
url = git://github.com/fuel/core.git
[submodule "fuel/packages/auth"]
url = git://github.com/fuel/auth.git
[submodule "fuel/packages/email"]
url = git://github.com/fuel/email.git
[submodule "fuel/packages/oil"]
url = git://github.com/fuel/oil.git
[submodule "fuel/packages/orm"]
url = git://github.com/fuel/orm.git
[submodule "fuel/packages/parser"]
url = git://github.com/fuel/parser.git
我在远程服务器上设置了一个裸存储库,我想在其中维护该项目。我希望能够从 github 获取 FuelPHP 及其子模块的更新,同时还能够将任何更改推送到裸存储库,以便我的团队成员和生产服务器可以从中获取更新。到目前为止,我遇到了砖墙。
这是我到目前为止所做的事情:
在服务器上:
$ mkdir websitename.git
$ cd websitename.git
$ git init --bare
在我的本地计算机上:
$ curl get.fuelphp.com/oil | sh
$ oil create websitename
$ cd websitename/
$ git remote add reponame ssh://<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="385f514c785d40595548545d165b5755" rel="noreferrer noopener nofollow">[email protected]</a>:2222/httpd/www/websitename.git
$ git push reponame 1.4/master
我收到这样的回复:
Counting objects: 14422, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4375/4375), done.
Writing objects: 100% (14422/14422), 2.20 MiB | 3.82 MiB/s, done.
Total 14422 (delta 9816), reused 14410 (delta 9810)
To ssh://<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="82eae3f0edeee6e0f0c2eae3f0edeee6ebece1ace1edef" rel="noreferrer noopener nofollow">[email protected]</a>:2222/home/haroldbr/public_html/crude.git
* [new branch] 1.4/master -> 1.4/master
然后,再次在服务器上:
$ git clone -l --no-hardlinks /httpd/www/websitename.git /httpd/www/websitename
这给了我这个错误:
Cloning into 'websitename'...
done.
warning: remote HEAD refers to nonexistent ref, unable to checkout.
显然我有一个配置问题,但我不知道它是什么。我希望能够使用 git 更新远程存储库中的所有文件。我设想它的工作原理如下:
在我的本地计算机上:
$ git pull origin 1.4/master
$ git push reponame --all
在服务器上:
$ cd websitename/
$ git pull
在完美的情况下,这将从 github 中提取 FuelPHP 及其软件包的所有更新,并推送所有这些更新,以及对 app/
或 public/中文件的任何更改
到裸存储库。我想做的事情可能吗?我是否需要在 app/
和 public/
中设置存储库并单独维护它们?我的配置有什么问题,无法从裸存储库克隆?
最佳答案
这里有一个关于如何使用 git 维护 FuelPHP 网站项目的截屏视频:http://blip.tv/fuelphp/creating-a-fuelphp-application-repository-5688973 ,但它不包括推送到裸存储库。
假设您已在 ssh://example.com/path/to/project.git 处设置了新的裸存储库,则可以按照以下步骤设置项目。从您的本地计算机:
git clone -b 1.4/master --recursive git://github.com/fuel/fuel.git /path/to/project
cd /path/to/project
rm -R .git
rm .gitmodules
rm -R docs
git init
git submodule add git://github.com/fuel/core.git fuel/core
git submodule add git://github.com/fuel/auth.git fuel/packages/auth
git submodule add git://github.com/fuel/email.git fuel/packages/email
git submodule add git://github.com/fuel/oil.git fuel/packages/oil
git submodule add git://github.com/fuel/orm.git fuel/packages/orm
git submodule add git://github.com/fuel/parser.git fuel/packages/parser
git add .
git commit -m "Initial commit"
git remote add origin master ssh://example.com/path/to/project.git
git push origin master
然后,您可以转到生产服务器并从远程存储库递归克隆以获取整个项目:
git clone --recursive ssh://example.com/path/to/project.git /path/to/production
然后,您将能够跟踪项目的更改,同时保持以下能力:
git submodule update --recursive
这将使您及时了解最新的 FuelPHP 软件包。
关于git - 使用 git 维护多子模块项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13883015/