本人學(xué)生黨,現(xiàn)在和幾個同學(xué)一起開發(fā),打算用git
目前git搭建好裸倉庫了,并且hooks可以自動同步到web項目中.
由于服務(wù)器上的代碼不是倉庫,現(xiàn)在想要將原先另一個服務(wù)器上的代碼導(dǎo)入到裸倉庫上,然后供團隊成員去pull。該如何做?自己想到的辦法就是先將代碼拉到本地,然后再從本地push到中央倉庫,由于做了自動同步,所以中央倉庫則自動將push的代碼同步到web項目。但個人感覺應(yīng)該有更好的方法。求告知?
還有就是一般git的使用倉庫是整個項目嗎?還是項目中的部分?如果是整個項目,用戶上傳圖片那豈不是每次更新還要將上傳的圖片更新到本地。
查了挺久資料的,也很少講這方面的,求各位大神詳解。
===========================
您好,就現(xiàn)在我們團隊在項目中出現(xiàn)了一個問題就是,由于5.1期間項目出了個bug,有個同學(xué)在家里修改了bug,但他的電腦沒裝git,所以使用ftp上傳了?,F(xiàn)在由于使用ftp上傳所以沒有使用到中央倉庫自然就沒有觸發(fā)到hooks的post-reveice也就不會push到網(wǎng)站項目中(有點繞,望大神能理解),所以現(xiàn)在使用git就無法獲取拉取到他所上傳的那一部分。所以現(xiàn)在的問題就是我要寫多一個hooks,網(wǎng)站項目上的一旦改變(如果是ftp上傳的)則pull到中央倉庫,然后本地才能獲取。做到中央倉庫和網(wǎng)站項目能雙向同步??赡芪覀冞@種做法不太好,但是目前暫時只能這么做,當(dāng)然也希望大神回答是順帶提供下好的方法。再次謝過
問題描述的不是很清楚,就我理解的簡單說一下。
遷移代碼的方法沒問題。
一般git使用的倉庫是整個項目,可能會包含一些submodule。
你說的用戶上傳圖片其實是另一個問題,你是不是把git項目的倉庫同步到服務(wù)器上當(dāng)做web項目的目錄來用了?
如果是的話會有點小問題,首先比較好的做法是git倉庫只用來開發(fā),至于發(fā)布部署web項目使用jenkins之類的工作來做,具體的流程是:
項目開發(fā)人員通過操作來觸發(fā)github的webhook,比如push代碼、打tag等。
github根據(jù)webhook配置請求你的部署工具,通知你的部署工具來進一步執(zhí)行發(fā)布的動作。
部署工具pull下來最新的代碼到代碼目錄,通過腳本或者命令來打包web項目,生成一個新的web項目目錄,發(fā)布到服務(wù)器。
這樣的話用戶的圖片上傳到了服務(wù)器中的項目目錄,而不是git代碼目錄,也就不用擔(dān)心更新上傳圖片的問題。
另外用代碼倉庫作為web項目來發(fā)布還可能會有安全問題,如果訪問權(quán)限控制不好別人可能會獲取到你git項目里面的文件,可能會泄露一些信息。
你說的方法就是很好的方法了,兩個遠程倉庫之間不能直接互通,需要進行一個中轉(zhuǎn)。
用戶圖片、緩存等當(dāng)然要忽略掉,倉庫中只存有效代碼。
其實.git
文件夾包含了所有的信息,你直接拷貝過去都可以。不過git有命令干這事
$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
這個操作基本上和下面的操作是一樣的:
$ cp -Rf my_project/.git my_project.git
然后把拿到的my_project.git
上傳到裸倉庫所在的服務(wù)器(替換文件夾),git文檔給出了很詳細的介紹:
Git-on-the-Server-Getting-Git-on-a-Server。
至于第二個問題,大膽放心地把整個項目加入到git進行管理吧,包括資源文件、文檔等,這樣團隊間更容易協(xié)作。但是不要包括編譯產(chǎn)生的文件,這個通過.gitignore設(shè)置。至于更新圖片的問題,如果圖片是這個項目要使用的資源,那自然要fetch下來,沒有任何問題。
也有團隊會把項目下自動生成的IDE配置加到版本管理中,如果團員使用的都是同一個IDE可以共享設(shè)置,這個就見人見智了。
===========
等等,為什么"中央倉庫則自動將push的代碼同步到web項目", 我覺的你指的應(yīng)該是運行的Web服務(wù),構(gòu)建服務(wù)器應(yīng)該有一個無修改的本地倉庫,主動向代碼倉庫pull
,然后根據(jù)最新的代碼啟動構(gòu)建,根據(jù)構(gòu)建出來的結(jié)果刷新Web服務(wù)或者打包。這個動作可以由hooks觸發(fā),但公共的代碼倉庫不應(yīng)該發(fā)起push
。