01-Git應用入門

背景分析

軟件項目開發過程當中,團隊間共享的代碼,文檔等可能被別人或本身不當心覆蓋或遺失、也不知道是誰,由於什麼緣由改了這段代碼、也沒辦法很好的復原前幾天的修改,因而版本控制系統(VCS-Version Control System)誕生。java

有了版本控制系統,咱們能夠瀏覽全部開發的歷史紀錄,掌握團隊的開發進度,並且做任何修改都再也不懼怕,由於你能夠輕易的復原回以前正常的版本。咱們也能夠透過度支和標籤的功能來進行軟件發行的不一樣版本,例如穩定版本、維護版本和開發中版本。近幾年版本控制系統的應用趨勢,如圖所示:git

image.png

版本控制系統(VCS,Version Control System)能夠劃分爲集中式和分佈式兩大類。集中式顧名思義,是用單一的服務器來集中管理保存項目的全部文件。項目團隊的成員經過客戶端鏈接到這臺服務器,下載或提交文件。如圖所示:github

image.png

集中式客戶端一旦沒法鏈接服務器,那麼版本控制功能將沒法使用(例如比較歷史版本差別;查看某個歷史版本內容等)。集中式的VCS傑出表明是SVN.windows

分佈式的特色是每一個客戶端除了能夠鏈接到一個集中的服務器外,客戶端自己能夠是一個完整的版本控制倉庫,項目團隊成員能夠在本身的電腦上對文件進行版本管理。如圖所示:安全

image.png

與集中式版本控制系統相比,分佈式版本控制系統的安全性要高不少,由於每一個人電腦裏都有完整的版本庫,某一我的的電腦壞掉了沒關係,隨便從其餘人那裏複製一個就能夠了。而集中式版本控制系統的中央服務器要是出了問題,全部人都無法幹活了。分佈式的VCS傑出表明是git。服務器

Git簡介(Introduction)

Git是一個開源的分佈式版本控制系統,做者是傳奇人物Linus,著名的開源操做系統Linux做者。liuns花了兩週時間本身用C寫出了一個Git。如今Linux系統的源碼都是由Git進行管理。Git現已經是VCS領域的江湖霸主。分佈式

Git安裝(Setting Up)

下載與安裝

Windows和Mac系統, 能夠直接從 http://git-scm.com/downloads 網址下載並運行安裝程序。對於Windows用戶可以使用 "Git Bash" 命令行工具(Git安裝時自帶)使用Git,Mac系統能夠直接實用終端窗口"Terminal"。工具

全局用戶信息配置

配置用戶和密碼學習

$ git config --global user.name "your-name"
$ git config --global user.email "your-email@youremail.com"

檢查配置信息fetch

$ git config --list
user.email=xxxxxx@xxxxxx.com
user.name=xxxxxx

Git基礎(Basic)應用實現

Git 命令簡介

Git提供了一組簡單、獨特、獨立的命令,這些命令的執行須要首先啓動windows或mac系統的Git終端(window 下能夠可以使用 "Git Bash"),其語法結構爲:

$ git <command> <arguments>

Git 經常使用命令有:

init, clone, config: 用於啓動Git進行項目管理。
add, mv, rm: 用於暫時記錄或存儲文件的變動.
commit, rebase, reset, tag:
status, log, diff, grep, show: show status
checkout, branch, merge, push, fetch, pull

Git 幫助手冊:(可快速獲取命令的使用幫助)

$ git help <command>
// or
$ git <command> --help

Git 操做手冊官方文檔 http://git-scm.com/docs.

Git 快速入門

這裏有兩種方式啓動Git管理項目:

  • 建立或啓動一個新項目,而後進行git操做。
  • 從一個Git主機上克隆一個已經存在的項目。

這裏咱們先重新項目開始,進行入門學習:

首先建立一個git工做目錄,命名爲githello,而後在目錄中建立一個一個Hello.java,其代碼爲:

public class Hello {
   public static void main(String[] args) {
      System.out.println("Hello, world from GIT!");
   }
}

建議,在Hello.java所在目錄一樣再建立一個README.md文件,經過此文件對你的項目進行描述,例如在文件中添加以下內容:

This is the README file for the Hello-world project.
  • 初始化git倉庫

基於Git實現項目管理時,首先在項目所在的根目錄(例如githello)執行"git init",過程以下:

git init 

// Change directory to the project directory
//$ cd /path-to/hello-git
 
// Initialize Git repo for this project

$ git init
Initialized empty Git repository in /path-to/hello-git/.git/

$ ls -al
drwxr-xr-x    1 xxxxx    xxxxx      4096 Sep 14 14:58 .git
-rw-r--r--    1 xxxxx    xxxxx      426 Sep 14 14:40 Hello.java
-rw-r--r--    1 xxxxx    xxxxx       66 Sep 14 14:33 README.md

其中,git init 指令執行結束,git本地庫的根目錄中會出啊關鍵一個".git"目錄(默認此目錄爲隱藏狀態)。

Git 存儲模型,如圖所示:

image.png

當咱們執行了git init 指令之後,本地庫實際上是空的的。您須要顯式地將文件存入倉庫。

  • 暫存和更新文件的變動。
// Add README.md file
$ git add README.md
 
$ git status
On branch master
Initial commit
 
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md
 
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        Hello.java
 
// You can use wildcard * in the filename
// Add all Java source files into Git repo
$ git add *.java
 
// You can also include multiple files in the "git add"
// E.g.,
// git add Hello.java README.md
 
$ git status
On branch master
Initial commit
 
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   Hello.java
        new file:   README.md
1)命令「git add<file>..」接受一個或多個可能帶有通配符模式的文件名或路徑名。您還可使用「git add.」添加當前目錄(以及全部子目錄)中的全部文件。
2)當一個新的文件被執行了「add」操做之後,它將存儲到git的暫存區(還並無commit到本地庫)。

Git 使用兩道工序提交文件的變動:
1)"git add <file>" 將文件存儲到暫存區。
2)"git commit" 將文件的全部變動由暫存取提交到本地庫。

  • 提交文件變動(git commit)

    假如咱們要將git暫存區文件的變動信息提交到本體庫,須要實用"git commit"指令,例如:

$ git commit -m "First commit"
[master (root-commit) 6e49a29] first commit
 2 files changed, 1 insertion(+)
 create mode 100644 Hello.java
 create mode 100644 README.md

接下來還能夠查看Git狀態:

$ git status

顯示Git提交日誌信息:

Git每次都會記錄提交的元數據,其中包括日誌消息、時間戳、做者的用戶名和電子郵件等)。咱們可使用"git log"指令顯示提交的數據。也可使用"git log --stat"查看文件的統計(statistics)信息。

$ git log
git log --stat
  • .gitignore 文件

在Git中,有一種特殊的文件,其文件全名就是 .gitignore,,主要功能是基於規則屏蔽某些文件,使得這些文件不被追蹤(tracked),天然push後也不會上傳到github等平臺。這個時候咱們只須要在須要執行push操做的目錄下建立.gitignore文件,而後定義其規則便可,例如:

# .gitignore
 
# Java class files
*.class

# Executable files
*.exe

# temp sub-directory (ended with a directory separator)
temp/

如今,執行「git status」命令來檢查未跟蹤(untracked)的文件。

$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
      .gitignore
nothing added to commit but untracked files present (use "git add" to track)

一般(Typically),咱們也會跟蹤或提交.gitignore文件,例如:

$ git add .gitignore
 
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
        new file:   .gitignore
 
$ git commit -m "Added .gitignore"
[master 711ef4f] Added .gitignore
 1 file changed, 14 insertions(+)
 create mode 100644 .gitignore
  
$ git status
On branch master
nothing to commit, working directory clean

Git遠程倉庫設置

咱們使用Git進行項目管理時,一般會將項目提交到遠程倉庫,其具體步驟以下:
第一步:建立遠程倉庫(例如Gitee)-本身建立。
第二步:設置遠程倉庫名和url映射。
經過 via "git remote add <remote-name> <remote-url>"指令完成,設置名字爲 "origin"的遠程倉庫綁定。
例如:

$ git remote add origin https://gitee.com/JasonCN2008/gittest.git

以列表方式呈現遠程倉庫名:

$ git remote -v

第三步:推送(Push)和提交(commit)本庫內容到遠程倉庫。

將本地庫內容推送到遠程庫(執行過程須要輸入遠程倉庫帳號和密碼),其語法爲git push -u <remote-name> <local-branch-name>,例如:

$ git push origin master
實踐過程演示:

修改Hello.java文件內容,例如:

public class Hello {
   public static void main(String[] args) {
      System.out.println("Hello, world from GIT!");
      System.out.println("Push and Commit !");
   }
}

執行Git操做

$ git status
// Stage file changes

$ git add *.java

$ git status

// Commit all staged file changes
$ git commit -m "Third commit"
[master 744307e] Third commit
 1 file changed, 1 insertion(+)
 
// Push the commits on local master branch to remote
$ git push origin master

從遠程倉庫克隆項目

執行 "git clone <remote-url>" 初始化一個本地庫,並將remote-url遠程庫中資源拷貝到本地庫工做目錄。例如,首先切換到git工做目錄,而後執行:

$ git clone https://gitee.com/JasonCN2008/gittest.git githello-clone

Clone 結束之後,切換到githello-clone目錄,執行ls -a指令查看目錄中資源。

總結(Summary)

本小節主要是對Git的基本指令操做進行了分析和實踐,咱們如今再將這些這令總結一下:

// Edit (Create, Modified, Rename, Delete) files。 
// Stage file changes, which produces "Staged" file changes
$ git add <file>                          // for new and modified files
$ git rm <file>                           // for deleted files
$ git mv <old-file-name> <new-file-name>  // for renamed file

// Commit (ALL staged file changes)
$ git commit -m "message"

// Push
$ git push <remote-name> <local-branch-name>
相關文章
相關標籤/搜索