手把手教你配置git和git倉庫

TechFlow2019發表於2020-09-21

今天是git專題的第二篇,我們來介紹一下git的基本配置,以及建立一個git倉庫的基本方法。

首先申明一點,本文不會介紹git的安裝。一方面是大部分個人PC的系統當中都是已經裝好了git的,另外一方面是git安裝的教程和內容網上太多了,大同小異,所以這部分我們就略過了。如果你開啟命令列輸入git提示報錯的話,那麼可以百度一下你對應系統的git安裝方法。

git配置

git常用的配置內容不多,一般來說最常用的就只有兩個。一個是user相關的配置,一個是alias相關的配置。下面就來詳細說說,首先講講user的配置。

user是配置你的使用者名稱和郵箱,這是一個非常常用的配置。因為像是github和gitlab等等程式碼倉庫,當我們使用git命令與它們互動的時候,它都會通過git的配置獲取我們的郵箱來和賬戶進行關聯,從而對我們的賬號進行驗證。配置的方法也很簡單,主要有兩種方法,一種是通過git config命令來配置,另外一種我們等會一起說。

先來看看config命令:

git config --global user.name chengzhi
git config --global user.email chengzhi@gmail.com

這裡的global表示的是全域性配置,一次配置全域性生效。

第二個配置是alias配置,也就是別名配置。別名配置的用途是我們自己給git命令起一個別名,這樣當我們輸入命令的時候可以進行簡化。比如說git當中切換分支的命令是git checkout xxx,這裡的checkout單詞很長,我們經常會拼錯。我們可以給它起一個別名是co,這樣命令就成了git co xxx,相比起來要舒服很多。

我們同樣可以使用git config命令來完成別名的配置:

git config --global alias.st status  # st 替換status
git config --global alias.co checkout # co 替換checkout

下面再來說說第二種方法,第二種方法就是直接修改git的配置檔案。在windows系統當中,git配置檔案的路徑是C:\Users\Administrator,如果是Linux或者是Mac系統,配置檔案地址是~/下。

我們cd到對應的地址尋找一下gitconfig這個檔案,如果找不到可以自己建立一個。我們在檔案當中輸入我們想要進行的配置就行了,這裡提供一個模板:

[user]
 name = chengzhi
 email = chengzhi@gmail.com
[alias]
 co = checkout
 br = branch
 ci = commit
 st = status

當然在這個config當中我們還可以進行一些其他的配置,比如配置git預設的編輯器成emacs等等,但一般這些配置不是很常用,所以我們就不提了,感興趣的可以自己瞭解一下。

一般來說配置使用者名稱和常用的別名就可以了。

配置ssh

git安裝好了之後,我們就可以註冊github賬號開始我們的開源旅程了。這裡說明一下,git和github其實並沒有特殊的關係,github只是使用git的開原始碼倉庫而已。前面也說到過使用git作為工具的程式碼倉庫有很多,除了github之外還有gitlab以及國內這幾年比較火的碼雲等等。

註冊成功之後,我們進入github需要做一件事情就是配置ssh。ssh是安全外殼協議,它本身和git沒什麼關係,主要是為了使用它來進行安全驗證。說白了為了證明你是你,為了方便根據賬號做許可權管理。比如阻止你clone你沒有許可權的程式碼,阻止你push程式碼到沒有許可權的遠端等等。說白了,這是一個安全工具,通過它可以讓我們的賬號和程式碼更加安全。

ssh相關的細節不做過多深入,感興趣的同學可以自行了解,我們簡單說下應該怎麼配置。首先我們需要使用ssh-keygen工具來生成我們的ras祕鑰。ras是一種對稱加密演算法,它的加密原理是生成一對祕鑰,一個是可以分享給別人的公鑰,一個是你自己保管的私鑰。簡單來說持有公鑰一方可以驗證私鑰的正確性,但是不可以破解私鑰加密的資料。所以我們會把公鑰上傳到各個網站,在自己的機器保留私鑰。

我們在命令列當中輸入:

ssh-keygen -t rsa -C "chengzhi@gmail.com"

這裡傳入的是你自己剛剛設定在git當中的郵箱,之後系統會提示你輸入密碼,之後我們檢視公鑰和私鑰需要輸入密碼。這裡可以不設定,敲兩個回車即可。完成之後,我們可以輸入命令檢視我們的公鑰:

cat ~/.ssh/id_rsa.pub

接著把螢幕上顯示的內容拷貝下來,填到github當中。具體的路徑是先點選右上角自己的頭像,選擇settings,在彈出的頁面當中選擇SSH and GPG keys,再點選右上角的New SSH key,起一個名字再把剛才複製的內容貼上進去即可。

這樣當我們clone倉庫的時候就可以使用SSH協議代替https協議了,這樣會更加安全。

github建立倉庫

最後,我們來介紹一下在github當中建立倉庫的方法。第一種方法是建立一個空白倉庫,這個很簡單,我們可以直接在github當中操作。

點選右上角頭像,選擇Your Repositories,之後點選右上角的New新建即可。

在之後彈出的頁面當中我們填上專案的名稱以及簡介即可,下圖框出的三個選項前兩個可選可不選,第三個一般不選。前兩個選項如果選上會替我們生成readme以及gitignoree檔案,這兩個檔案的用途我們以後會說,可選可不選隨意。第三個框表示開源許可證,和我們關係不大,可以忽略。

如果說我們已經在本地開發好了內容,想要同步到github當中這時候應該怎麼辦?當然我們也可以現在github建立,再把本地的程式碼拷貝進去,但顯然這樣做很low,我們還有更好的辦法。

當然我們在github建立專案是免不了的,建立好了之後,我們要做的就是把本地的資料夾和遠端的這個剛建好的倉庫關聯起來。首先,我們在本地的資料夾當中執行git init,在本地初始化一個git倉庫。

git init

下面我們要做的就是關聯本地的倉庫和遠端的倉庫,並且把本地的倉庫當中的內容push到遠端去。為了做到這一點,我們執行git remote add origin命令給本地的git倉庫增加一個遠端的源,這裡後面跟著的連結是我們剛才在github裡建立好的倉庫的地址。

git remote add origin git@github.com:moutsea/git-tutorial.git

由於這個git-tutorial是我們自己建立的,所以是沒有問題的,如果add別人的repo可能會報錯。新增完成之後我們需要拉取遠端的改動,因為我們在建立repo的時候建立了一個readme檔案,這也算是一個改動,我們需要把這個改動拉下來,和遠端保持同步之後再推送更新。

記住這一點,我們在push程式碼到遠端之前,一定要先通過git pull和遠端先保持同步之後再進行推送

但是我們直接git pull是不行的,會報錯,因為雖然本地和遠端關聯起來了,但是分支沒有關聯,它根本不知道該去pull哪個分支。我們需要把本地的master分支關聯遠端的master分支,但是這又迎來一個新的問題。我們本地暫時還沒有任何改動,這個master分支實際上是不存在的,所以我們需要先提交本地的檔案到git倉庫。

這裡的兩個命令很常規,首先是git add .這裡的.表示新增全部變更,使用.的時候要小心,因為有時候不是所有檔案都需要新增的。大家知道就好,細節我們以後再說。然後是git commit -m提交到git倉庫,由於我們配置了alias,所以可以使用ci代替commit。-m是message的意思,後面需要傳入一個字串,表示這個改動的備註,方便以後檢視。

注意這裡的commit操作並不是提交到遠端,而是提交到本地的git倉庫。terminal當中會把git新增的檔名都輸出出來,由於我用的是中文,所以出來的是亂碼,不過這沒有關係,至少我們add成功了。

之後我們用命令把本地的master和遠端的master分支關聯起來,其實也就是給本地的master分支新增一個上游:

git branch --set-upstream-to=origin/master master

現在一切都已經就緒了,按理說我們直接git pull之後在git push就可以了。但還有一個小問題是你會遇到這麼一個報錯:fatal: refusing to merge unrelated histories.

這個報錯的意思是說不能夠將兩個沒有關係的歷史記錄合併起來,原因是我們commit到本地git倉庫的時候,本地的master還沒有和遠端的master分支取得關聯。git預設是不允許將沒有關聯的記錄進行合併的,不過這個問題也很好解決,我們只需要加上引數強制讓它允許就可以了:

git pull --allow-unrelated-histories

這樣我們就會發現它已經成功了,遠端的readme檔案已經被拉取了下來。之後我們再執行git push即可。由於我們已經將本地的master和遠端的master取得了聯絡,我們只需要git push就可以了,不需要git push origin master了。

我特意為git專題建立了一個github的repo,連結如下:https://github.com/moutsea/git-tutorial

今天的文章到這裡就結束了,如果喜歡本文的話,請來一波素質三連,給我一點支援吧(關注、轉發、點贊)。

原文連結,求個關注

本文使用 mdnice 排版

- END -

{{uploading-image-690710.png(uploading...)}}

相關文章