git學習筆記

之前都是直接用Github for windows圖形客戶端來上傳代碼,並不瞭解git的命令,也遠沒有發揮出git應有的威力。現在在作一個CMS的項目,最後須要將其部署到遠端服務器上,而通過前端工程化思想的洗禮以後,我已沒法忍受手工傳文件到服務器的"FTP部署法",由於這樣原始低效易出錯,且嚴重不利於維護更新。本着能自動化就自動化的精神,我開始研究用git來部署網站的方法。
學習資料連接: http://blog.jobbole.com/78960/
git倉庫(repo)是指存放項目文件的目錄,這個目錄下有一個.git隱藏文件(若是沒有,用git init生成),裏面是用於版本管理的相關文件,別亂動。
.git是版本庫,其中最重要的是stage(暫存區),還有git自動建立的分支master,以及指向master的一個指針HEAD。
進入暫存區的文件被暫時「鎖定」等待提交,文件在加入暫存區以後發生的變更不影響暫存區,提交以暫存區版本爲準。
注意:命令裏能夠使用通配符*?等。
經常使用命令
git init 初始化版本庫(--bare 生成裸庫,即只有記錄版本庫歷史信息的文件,而沒有實際項目源文件的拷貝)
git add [file]:將文件添加到暫存區等待提交。文件被添加暫存區後所發生的變更將不被提交,除非從新添加一次。
git commit -m [message]:將暫存區的文件提交到HEAD指向的當前分支上
git diff [file]:查看文件相對於分支上的變更
git status [file]:查看文件狀態
git checkout -- [file]:用暫存區文件覆蓋工做區文件,至關於丟棄上次add以來的變更。git checkout . 表示用暫存區的全部文件覆蓋工做區文件。
git log 查看提交日誌
git reflog 查看最新動做日誌
git reset --hard [版本號] 恢復指定版本
git reset -hard HEAD^ 恢復到上一個版本(一個^表示一個版本,或者用~[數字]表示回退版本數)
分支策略
通常master分支是最穩健的,用於發佈新版本,不能在上面幹活,幹活都應該在別的分支上,幹完再合併到master。
git branch [branch] 建立新分支
git checkout [branch] 切換到指定分支(帶上-b參數表示同時建立新分支)。切換分支後,倉庫裏的文件內容會變到與當前分支相同。
git merge [branch] 將指定分支合併到當前分支。當合並分支與當前分支有衝突時,git會在合併後的文件中標註出來,須手動消除衝突後再提交一次。
git branch -d [branch] 刪除指定分支
git stash 隱藏當前分支的工做現場,好比工做進行到一半時沒法提交,但必須切換分支,此時可以使用這個命令。
git stash list 列出被隱藏起來的工做現場
git stash apply/drop 恢復現場/...並刪除隱藏的工做現場
遠程操做
git remote 查看遠程庫信息(參數-v查看詳細信息)
git remote add [remote branch] [server]:在遠端服務器上克隆本地倉庫,遠程庫名默認爲origin
git push [remote branch] [branch]:將分支推送到遠端倉庫(第一次推送時在push後面加上-u參數)
git clone [remote address]:將遠端(Github)的倉庫克隆到本地,git自動將本地master和遠程master對應起來
策略:哪些分支須要推送?
  1. master是主分支,須要時刻與遠程同步
  2. 開發分支不須要推送到遠程,能夠合併到master以後再推送
git pull 從遠程拉取分支到本地
git branch --set-upstream-to [local branch] origin/[branch] 關聯本地分支與遠程分支
 

多人協做工做模式通常是這樣的:前端

  1. 首先,能夠試圖用git push origin branch-name推送本身的修改.
  2. 若是推送失敗,則由於遠程分支比你的本地更新早,須要先用git pull試圖合併。
  3. 若是合併有衝突,則須要解決衝突,並在本地提交。再用git push origin branch-name推送。

 

附:利用git向服務器部署Node.js項目代碼的方法:node

  1. 在服務器上建立項目目錄,初始化爲git倉庫:git init,配置爲容許接收代碼提交:git config receive.denyCurrentBranch ignore
  2. 在本地項目建立遠程分支:git remote add 遠程分支名 ssh://用戶名@遠程地址/項目路徑/.git
  3. 將項目的master分支push到服務器上:git push 遠程分支名 master
  4. 到服務器端git staus,會發現暫存區內一堆的反操做(例如將原本應該保留的文件delete掉)。此時先更新再檢出代碼 git update-server-info、git checkout -f,效果是將全部文件還原到最後一次commit的版本,暫存區內的修改被丟棄。
  5. 而後npm install補上node_modules就能夠了!
  6. 服務器端添加自動更新鉤子腳本:1)cd .git/hooks;2) 新建 post-receive 或將 post-receive.sample 重命名爲 post-receive;使用post-update也能夠, 不過須要先將post-update中的exec git update-server-info這一行刪掉;3)vim post-receive,將以下內容複製到文件中
    • #!/bin/sh
    • unset GIT_DIR
    • cd ..
    •  git checkout -f
  7. 安裝pm2來守護網站
  8. 在Linux系統下監聽低於1024的端口,須要root權限,爲此用一個變通的辦法,即利用ip表設置80端口的信息與3000端口互相轉發,此轉發在網卡層面,性能很高。方法以下:
    1. 輸入sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
    2. 切換到root用戶
    3. 輸入iptables-save>/etc/iptables-rules
    4. 編輯/etc/network/interfaces文件,在最後一行插入:pre-up iptables-restore</etc/iptables-rules,實現開機自動配置
相關文章
相關標籤/搜索