簡單介紹Git版本控制Part4

最終回

Tommy

遠端操作

建立遠端檔案庫

git init --bare

在目前資料夾建立遠端檔案庫

git init --bare folder

開新資料夾並且建立遠端檔案庫

本地檔案庫連結遠端檔案庫

git remote add origin url

新增遠端檔案庫位置

(適合已經有本地端檔案庫)

遠端檔案庫代號origin

git remote show origin

顯示遠端檔案庫資訊

查看遠端的分支

git ls-remote url

列出遠端檔案庫中所有的分支內容

抓取紀錄

git fetch

把遠端commit紀錄抓下來到本地端

(不會重設工作目錄,也不會改變HEAD和分支位置)

origin/master遠端分支

怎麼更新到工作目錄?

把遠端當作分支來看!

merge吧git

git merge origin/master

如果本地端沒有任何commit則master會自動建立

如果本地端有master分支則依照合併方式處理

抓取遠端檔案庫內容

git pull

pull = fetch + merge

拉下紀錄並同時自動merge

(這時候就會改變工作目錄,HEAD,分支位置)

pull可能會遇到衝突

因為有merge的動作

衝突解法跟分支合併一樣

找出誰也在改這裡,然後跟他協調這裡該如何處理

git pull origin master

抓取遠端檔案庫的master分支內容

每次都要打這樣好長

git branch -u origin/master master

設定遠端master跟本地端master為預設推送或拉取的位置

設定過就不用每次打很長

git pull

抓取遠端內容

不用再輸入origin惹

git remote remove origin

刪除遠端檔案庫設定

如果沒有本地端檔案庫

另外一種方式

git clone url

建立相同名稱資料夾並且下載檔案庫全部內容

(全新的本地端檔案庫,同時也設定好遠端預設推送或拉取的位置)

git clone url folder

建立folder資料夾並且下載檔案庫全部內容

(全新的本地端檔案庫,同時也設定好遠端預設推送或拉取的位置)

git push

把本地端的commit推送到遠端

如果沒設定預設推送位置

推送的時候也可以一起設定

git push -u origin master

和 git branch -u origin/master master 意思相同

然後同時也會把commit推到遠端去

push時會先要求pull

因為push上去的commit一定要包含遠端最後一個commit

所以得先pull合併現在遠端最後一commit接下來才能push

Why?

merge解決沒有包含commit的問題

另外一種壞方法

git push -f

強制遠端設為跟本地端一樣的分支位置

(團隊合作中通常禁用,避免不知情的人又合併進去)

新建一個commit然後push才是正解

push -f 不管3721一律蓋掉

push不上去很緊張,只好改用-f硬推,其實你只是沒有pull而已。

git push --force-with-lease

稍微安全一點的做法,你至少要先fetch確定知道有些記錄沒更新到

才能硬推

清除不必要的檔案

git clean -f

清理未版控的檔案(reset不會把沒有版控的檔案刪除)

git gc

清理不必要git的Objects物件

團隊還沒使用git該如何導入

因為決策者他不寫code
因為還沒感受到git的美好

自身經驗分享

成功導入兩間公司使用git

一間原本使用VSS(5人團隊)

一間原本使用SVN(12人團隊)

導入前需要考慮以下事情

考慮性質

開放式 or 封閉式

考慮平台

線上(GitHub, Bitbucket, GitLab...) or 自架(Gitea, GitLab...)

考慮能力

導入者需最熟悉git

團隊成員有問題至少有人可以問

Q & A

Thank you for listening

簡單介紹Git版本控制Part4最終回

By Yi-Tai Lin

簡單介紹Git版本控制Part4最終回

  • 716