git 使用簡介
Git的簡明
我試着寫一下git的簡單使用說明,如有錯誤的地方,歡迎斧正.
首先,下載並安裝git.(廢話)
生成公鑰秘鑰,並綁定到gogs
代碼管理中心上.
在初次使用git的時候需要做的一件事,之后使用過程中不需要這么做了.
可以把這個過程認為是一個認證過程.我以我的理解講解一下.詳細的可以參考
https://help.github.com/articles/generating-an-ssh-key/
簡單的說,2個步驟
1. 生成秘鑰.公鑰
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]
Enter passphrase (empty for no passphrase): [Type a passphrase]
Enter same passphrase again: [Type passphrase again]
2. 綁定到 代碼托管中心服務器中 .在個人頁面 -> 用戶設置 ->管理SSH密鑰-> 增加密鑰
將生成的id_rsa.pub(這個文件所在的目錄是C:/users/XXX/.ssh/id_sra.pub) 拷貝到 密鑰內容部分.
至此,綁定完成.
在以后的使用中,你的每一次提交,每一次clone,每一次push,每一pull,都是這個賬號的, 如果你注冊了兩個git賬號,想push操作的話,可以嗎? 如果不修改 .gitconfig
文件中的配置, 很有可能因權限問題報錯. 在使用中,這一點常常被我們所忽略.
這是一個服務器log的截圖
建立遠端倉庫和本地倉庫的關聯,並將本地倉庫同步到遠端.
git是一個分布式的系統. 在遠端
(咱們用的也就是那個測試服務器上)和本地端
都有倉庫(所謂倉庫,也就是你的項目存放的地方). 我們怎么把自己的代碼提交到遠端的服務器上呢.
主要命令有以下四條.
首先,我們通過瀏覽器在服務器上建立一個倉庫.(最好不要把readme勾選 ). 在你想放該文件的文件夾下面,右鍵->打開git bash. 執行以下命令
標准做法如下:
git remote add origin http://172.20.17.20:3001/wanglinzhizhi/XXXX.git
就是建立關聯的過程 .
然后,當你寫好代碼(文檔,更新內容)后,為說明方面,我們假設完成的文件叫index.html
, 放到這個倉庫(文件夾下面) , 然后執行命令.
git add index.html
再然后 , 執行
git commit -m '這是我的一次測試性的更新說明,我更新了index.html文件.對結構進行了優化.'
Notes: 執行完git add XX
和 git commit 'blablabla'
之后 至此本地倉庫的commit以及版本已經建立完成. 下一步,我們是將本地的倉庫 push到服務器中.讓代碼保存在服務器中.
最后 ,依然在git bash
中執行命令
git push
然后輸入你的gogs的郵箱和密碼. 直到顯示 ...done
表示提交完成. 至此,我們完成了將本地倉庫push到遠端倉庫. 可以再瀏覽器中再次打開你剛才創建
,並且clone
,並且push
的倉庫了.
😃
Notes : 在使用中非常重要也非常基本的一個命令是, git status
.通過這個命令, 我們可以知道當前的狀況.在什么情況下使用呢? 恩, 在不知道當前什么狀況的情況下使用.
還有一個比較常用的命令, git XXX -h
. 這里的XXX(比如 push, pull,log 等)git命令, 在不知道git XXX命
令怎么使用的時候, 可以 直接在后面加一個-h
,顯示出幫助文件. 像這樣(git push -h
, git pull -h
)
個人感覺,這幾天的使用經驗來說,git是一個很友好的工具, 因為在你輸入錯誤 的情況下,它能夠很智能的提示.
總結一下,
每次,遠端和本地端的綁定需執行一行代碼:
git remote add origin http://172.20.17.20:3001/wanglinzhizhi/XXXX.git
每次git 提交到服務器有三個步驟
git add (你想add的文件.)
git commit -m 'xxxx'
git push
NOTES:
一種不是標准做法的方法,clone
這是一種比較偷懶的方法, 嚴格意義上說是錯誤的,因為僅僅對於那些你是master
權限的人才可以這樣操作. 因為這么clone之后(或者直接pull) 弄了之后,就建立了關聯.
Note: 注意git操作時對應的文件夾(血淚教訓(T_T)
一個接近實際中的項目上傳實例
我本地有個t6multivan_m(1)M的項目. 我現在要將其傳到遠端git服務器怎么做呢? 這里是真是用到
git remote add origin XXX
git push -u origin master
的地方.
具體如下:
首先進入到對應項目文件夾 ,然后空白處右鍵鼠標->git bash
執行命令
git init
我們在本地倉庫中先提交項目.操作過程是上面的提交過程
// git status
git add -A
//git status
git commit -m '這是一個接近真實環境的項目上傳操作'
到這里,本地的倉庫已經完成,現在我們將其push到遠端服務器上的倉庫中.
-
為了上傳到遠端的服務器中,我需要先用瀏覽器,在遠端倉庫中創建一個倉庫.(建議寫成同名的)
然后將遠端的倉庫和本地的倉庫關聯起來.
在本地git bash中執行以下命令:
git remote add origin http://192.168.15.75:3141/wanglinzhizhi/t6multivanM.git
這條命令使本地端和遠端建立關聯.
-
最后一步,
git push -u origin master
步驟截圖如下:
當第一次建立了倉庫之后,以后每次使用的時候最常用的兩個命令git pull
, git push
.
我們還會經常使用到的一個命令 git log
或者 git log --graph
. 執行這個命令可以幫助我們查看 歷史提交記錄.
我覺得一些良好的習慣對於項目管理是有作用的.
- 每天臨走之前,git push 一下今天的代碼, 第二天來了繼續工作之前,git pull 一下,把遠端的最新的代碼, 同步到本地.
- 每次完成 了重大的部分或者一個單獨的單元的時候, git push 一下.
需要注意的是,始終保持遠端的倉庫是最新的就可以了. 上述的幾個命令已經夠我們玩轉單擊版的Git了. 下一節我們將講解branch 和 merge操作.
另一個比較好的習慣是 **建立一個Git 倉庫(Git-repos). 所有的項目都放在這里倉庫下面.每個項目只需要一個文件夾,不再需要建立N個zip壓縮包,等我們push到服務器之后,誰想下壓縮包自己去服務器上去取就夠了.
Caching your GitHub password in Git
If you're cloning GitHub repositories using HTTPS, you can use a credential helper to tell Git to remember your GitHub username and password every time it talks to GitHub.
If you clone GitHub repositories using SSH, then you authenticate using SSH keys instead of a username and password. For help setting up an SSH connection, see Generating an SSH Key.
Tip: You need Git 1.7.10 or newer to use the credential helper.
The credential helper is included with GitHub Desktop. The app also provides a Git shell so you won't ever need to install and configure Git manually. For more information, see "Getting Started with GitHub Desktop."
If you prefer working with the command line, you can also install a native Git shell, such as Git for Windows. With Git for Windows, running the following in the command line will store your credentials:
git config --global credential.helper wincred
這是從GitHub 上粘過來的 一段 . 作用是 自動保存密碼,不用每次push的時候都輸入一遍賬號密碼,神煩.只需要 在git bash中輸入 上面的一行代碼, 然后再 輸入一次賬號密碼,以后就再也不需要輸入了.(_)
參考資料:
銀河系,晚安 😃
- branch and merge (分支與合並操作)
branch 顧名思義就是 建立分支的意思.
在使用branch的功能的時候,我們主要會用到的命令有
git branch
git branch
命令的功能是將分支的名字以列表的形式顯示出來.同時可以確定當前所在的分支(* 號表示我們現在所在的分支) .
下面2條命令如下: 作用是在當前的基礎上,創建一個新的分支.並把分支命名為AnewBranchDemo
git branch AnewBranchDemo
git checkout AnewBranchDemo
第一句的意思是創建AnewBranchDemo
這個分支,第二句的 意思是 是當前分支為 AnewBranchDemo
這個分支上.(由此我們可以知道,如果我們想切換回master
分支,我們需要做的就是執行git checkout master
即可.)
這兩條命令可以簡化為1條命令,如下.
git checkout -b AnewBranchDemo
但是個人建議最開始使用的時候還是用上面2條命令比較好. 語義上更加容易理解.
分支是一種很好的東西. 當我們在實現某個功能的時候, 我們需要大面積修改源代碼.但是有不想破壞已經修改好的 部分,,如果這里的修改改壞了,改動得太多,連自己都忘了那些地方改了的,那些沒改,想回溯就將是已將痛苦不堪的事情了.......
當然 有一種原始的做法是備份一個文件夾放在旁邊我們就把備份的文件夾覆蓋該壞掉的文件. 這是可以的. 只是麻煩.
我們運用分支的 話,那么我們只需git branch feature-Test
. 然后放心的在feature-Test
做實驗,如果這里的實驗成功了,我們merge
回到master
中即可. 如果另一種情況,我們改的太多,連自己都不知道那些改了哪些沒改的話, 我們可以干脆的放棄掉這個分支. 重新給予master
創建分支 git branch feature-TestB
. 干凈利落.
😃
branch 顧名思義就是 建立分支的作用 ,相對分支的是 merge , 合並的作用
主干分支 , master
使我們分支branch
的起點, 也是我們 合並分支的終點.
主干分支一般是作為正式版存在的,我們所有的修改,所有的測試都是在分支上進行,直到我們確定 分支上沒有問題之后,我們再將其合並到主干分支上.
合並操作中,我們主要用到的命令如下:
首先, 我們要確定我們要把誰合並到誰上. 假設我們完成了feature-Test 的功能. 我們希望把feature-Test合並到 master中. 那么我們首先需要切換到master上
git checkout master
然后 合並featrue-Test
分支 執行:
git merge --no-ff featrue-Test
Notes: --no-ff 參數的目的是為了在歷史記錄中明確的記錄下本次合並.
done.
創建分支,並且 合並分支就完成了.
總結一下分支和合並過程.
//創建分支
git branch feature-Test // 創建新的分支feature-Test
git checkout feature-Test //從master上切換到 feature-Test
//合並分支
git checkout master //切換到主干分支
git merge --no-ff featrure-true // 合並到主分支.
現在你可以去看看master中是不是多了你剛才寫在feature-Test的那段代碼.(廢話...)
在這個過程中,我們可以有事兒沒事兒像之前使用git status
一樣,多多使用git branch
和 git log --graph
. 當提交的次數多了,會非常壯觀.
😃
最后,別忘了合並會主干之后,git push
到遠端 服務器. 用一種拉風的說法,這叫 雲備胎(備份)
.
至此,到了這一步,
如果想把版本弄錯,或者想改錯版本, 提交錯版本 將是一件非常困難並且復雜的事情.
:)
代碼管理中,如果發生了錯誤的commit ,或者錯誤的merge 怎么辦呢?
答: 回滾
我們使用命令git log
或者git log --graph
的時候,會看到
commit 后面的一大串字符串. 其實這串字符串是git為我們生成的版本號.
我們的每一次commit , git 都會為我們創建一個新的版本. 所以每一次commit之后都會有一個對應的長長的一大串字符串. 如下圖
對於錯誤的commit 我們需要做的就是回滾到對應的上一個正確的版本
需執行的代碼.
git reset --hard c23efd0806f0a117122fdc118f43f6a33905895e
執行上述 reset 回滾操作,我們就回到了對應的版本的代碼.
一鍵還原.
問題來了,那么對於,merge操作導致 的錯誤呢? 一樣的,也是使用
git reset --hard XXXXcommit對應的版本號XXX
git其實還有一些非常常用的功能,
比如
git diff
等
另外一方面,我這里主要在講解git命令行的使用, 我這里沒有提到或者很少提到瀏覽器中打開的效果.其實瀏覽器中的效果是十分驚艷的. 截圖如下.
這是可視化的git diff 綠色是新添加的代碼, 紅色是刪除的代碼。
待發行的版本, 需要看的話,可以直接從這里下載源碼.
- 團隊合作的git操作 GitFlow
>_
詳見GitFlow 工作流
郵件系統
done
- 開啟了登錄驗證
- 開啟了Notification
- 開啟TSL加密
😃
Notes: 現在暫時使用的是我(linzhizhi.wang@qq.com)郵箱, 半個月后(2016.06.14)換正式的郵箱, 因為 申請時間是半個月....
nginx 反代
building.....