2012-12-14 23 views
2

維護多子模塊項目,我正在開發使用FuelPHP框架另外兩名隊員同一個網站。我想使用git來維護這個項目,但是我在配置過程中遇到了一些麻煩。當我使用oil來安裝FuelPHP時,它會安裝主框架以及github中的幾個子模塊。該.git/config文件中的文檔根目錄如下:使用Git

[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://[email protected]: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://[email protected]:2222/home/haroldbr/public_html/crude.git 
* [new branch]  1.4/master -> 1.4/master 

然後,在服務器上反擊N:

$ 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 

在一個完美的世界,這將拉動對FuelPHP所有更新和它的包從github並將所有這些更新以及對app/public/中的文件的任何更改推送到裸存儲庫。我試圖做甚至可能嗎?我是否需要在app/public/中設置儲存庫並分別維護它們?我的配置有什麼問題,我無法從裸回購克隆?

回答

2

有關於如何使用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軟件包。

0

您已成功克隆,但是你只需要簽出你想要的分支之後。由於您沒有在裸回購倉庫中定義頭像,因此會給您提示。

此外,git clone --recursive應該做一次,這也將得到您的子模塊。從此,你可以做一個git pull後跟一個git submodule update

+0

我嘗試過'git clone --recursive --no-hardlinks -l websitename.git websitename',它給了我這個錯誤:'克隆到'websitename'...完成。子模塊'fuel/core'(git://github.com/fuel/core.git)註冊路徑'fuel/core'克隆成'fuel/core'...致命:無法連接到github.com:github .com [0:207.97.227.239]:errno =連接被拒絕將'git://github.com/fuel/core.git'複製到子模塊路徑'fuel/core'failed'中 –

+0

您沒有鑰匙該機器連接到github。因此,克隆沒有遞歸,然後'git submodule init',然後使用'sed'將urls更改爲只讀格式,然後'git submodule update'。如果你不會爲燃料做出貢獻,那麼你可能只需使用url的只讀形式,服務器就可以把它拉下來。 HTTP表單將做到這一點。 –

+0

我用'git clone --no-hardlinks -l websitename.git websitename'。然後'cd websitename'和'查找。 -exec grep「git://」'{}'\; -exec sed -i's/git:\/\ // http:\/\ //''{}'\;'用'http://'代替'git://'。我運行了'git submodule init'和'git submodule update',這成功地讓我克隆了github的燃料核心。但是,我的服務器回購仍然不像我的本地回購。我可以創建一個文件,對其進行分級,提交,然後推送到裸露的回購站。但是,當我試圖拉到實時服務器時,它告訴我「已經最新。」我是否需要更改分支名稱或其他內容? –