首頁  >  問答  >  主體

團隊如何正確的對git進行部署

本人學生黨,現在和幾個同學一起開發,打算用git

目前git搭建好裸倉庫了,並且hooks可以自動同步到web項目中.

由於伺服器上的程式碼不是倉庫,現在想​​要將原先另一個伺服器上的程式碼匯入到裸倉庫上,然後供團隊成員去pull。該如何做?自己想到的方法就是先將程式碼拉到本地,然後再從本地push到中央倉庫,由於做了自動同步,所以中央倉庫則自動將push的程式碼同步到web專案。但個人感覺應該有更好的方法。求告知?

還有就是一般git的使用倉庫是整個專案嗎?還是專案中的部分?如果是整個項目,用戶上傳圖片那豈不是每次更新還要將上傳的圖片更新到本地。

查了挺久資料的,也很少講這方面的,求各位大神詳解。

===========================

您好,就現在我們團隊在專案中出現了一個問題就是,由於5.1期間專案出了個bug,有個同學在家裡修改了bug,但他的電腦沒裝git,所以使用ftp上傳了。現在由於使用ftp上傳所以沒有使用到中央倉庫自然就沒有觸發到hooks的post-reveice也就不會push到網站項目中(有點繞,望大神能理解),所以現在使用git就無法獲取拉取到他所上傳的那一部分。所以現在的問題就是我要寫多一個hooks,網站項目上的一旦改變(如果是ftp上傳的)則pull到中央倉庫,然後本地才能獲取。做到中央倉庫和網站專案能雙向同步。可能我們這種做法不太好,但目前暫時只能這麼做,當然也希望大神回答是順帶提供下好的方法。再次謝過

过去多啦不再A梦过去多啦不再A梦2727 天前603

全部回覆(3)我來回復

  • PHP中文网

    PHP中文网2017-05-02 09:33:53

    問題描述的不是很清楚,就我理解的簡單說一下。

    遷移程式碼的方法沒問題。
    一般git使用的倉庫是整個項目,可能會包含一些submodule。
    你說的用戶上傳圖片其實是另一個問題,你是不是把git專案的倉庫同步到伺服器上當做web專案的目錄來用了?

    如果是的話會有點小問題,首先比較好的做法是git倉庫只用來開發,至於發布部署web項目使用jenkins之類的工作來做,具體的流程是:

    1. 專案開發人員透過操作觸發github的webhook,例如push程式碼、打tag等。

    2. github根據webhook設定請求你的部署工具,通知你的部署工具來進一步執行發布的動作。

    3. 部署工具pull下來最新的程式碼到程式碼目錄,透過腳本或指令來打包web項目,產生一個新的web專案目錄,發佈到伺服器。
      這樣的話用戶的圖片上傳到了伺服器中的專案目錄,而不是git程式碼目錄,也就不用擔心更新上傳圖片的問題。

    另外用代碼倉庫作為web項目來發布還可能會有安全問題,如果訪問權限控制不好別人可能會獲取到你git項目裡面的文件,可能會洩露一些信息。

    回覆
    0
  • 漂亮男人

    漂亮男人2017-05-02 09:33:53

    你說的方法就是很好的方法了,兩個遠端倉庫之間不能直接互通,需要進行一個中轉。

    用戶圖片、快取等當然要忽略掉,倉庫只存有效代碼。

    回覆
    0
  • PHPz

    PHPz2017-05-02 09:33:53

    其實.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上傳到裸倉庫所在的伺服器(替換資料夾),git文件給了很詳細的介紹:
    Git-on-the-Server-Getting-Git-on-a-Server。

    至於第二個問題,大膽放心地把整個專案加入git進行管理吧,包括資源檔案、文件等,這樣團隊間更容易協作。但是不要包括編譯產生的文件,這個通過.gitignore設定。至於更新圖片的問題,如果圖片是這個專案要使用的資源,那自然要fetch下來,就沒有任何問題。

    也有團隊會把專案下自動產生的IDE配置加到版本管理中,如果團員使用的都是同一個IDE可以共享設置,這個就見人見智了。

    ===========

    等等,為什麼"中央倉庫則自動將push的代碼同步到web項目", 我覺的你指的應該是運行的Web服務,構建服務器應該有一個無修改的本地倉庫,主動向代碼倉庫pull,然后根据最新的代码启动构建,根据构建出来的结果刷新Web服务或者打包。这个动作可以由hooks触发,但公共的代码仓库不应该发起push

    回覆
    0
  • 取消回覆