Git配置安裝使用教程操作github上傳克隆數據


Git是何方神聖?

Git是用C語言開發的分布版本控制系統。版本控制系統可以保留一個文件集合的歷史記錄,並能回滾文件集合到另一個狀態(歷史記錄狀態)。另一個狀態可以是不同的文件,也可以是不同的文件內容。舉個例子,你可以將文件集合轉換到兩天之前的狀態,或者你可以在生產代碼和實驗性質的代碼之間進行切換。文件集合往往被稱作是“源代碼”。在一個分布版本控制系統中,每個人都有一份完整的源代碼(包括源代碼所有的歷史記錄信息),而且可以對這個本地的數據進行操作。分布版本控制系統不需要一個集中式的代碼倉庫。

當你對本地的源代碼進行了修改,你可以標注他們跟下一個版本相關(將他們加到index中),然后提交到倉庫中來(commit)。Git保存了所有的版本信息,所以你可以轉換你的源代碼到任何的歷史版本。你可以對本地的倉庫進行代碼的提交,然后與其他的倉庫進行同步。你可以使用Git來進行倉庫的克隆(clone)操作,完整的復制一個已有的倉庫。倉庫的所有者可以通過push操作(推送變更到別處的倉庫)或者Pull操作(從別處的倉庫拉取變更)來同步變更。

Git支持分支功能(branch)。如果你想開發一個新的產品功能,你可以建立一個分支,對這個分支的進行修改,而不至於會影響到主支上的代碼。

Git提供了命令行工具;這個教程會使用命令行。你也可以找到圖形工具,譬如與Eclipse配套的EGit工具,但是這些都不會在這個教程中進行描述。

Git運行環境

系統:windows

軟件:Git-1.8.4-preview20130916.exe

Windows安裝git很簡單,打開安裝文件exe,按提示下一步安裝到底OK。

github是一個git項目托管網站

注冊地址:https://github.com/signup/free

系統:liunx

軟件:git-1.8.4.2.tar.gz

Mac OS X安裝

由於mac git的地址http://code.google.com/p/git-osx-installer/被牆,被迫使用源碼安裝,源碼可以從http://kernel.org/pub/software/scm/git/下載,編譯源碼需要先安裝xcode,參考http://developer.apple.com。

編譯安裝

1、解壓

tar xjvf git-1.7.4.1.tar.tar.bz2

2. 編譯

     cd git-1.7.4.1

     ./configure --prefix=/usr/local

     make

3.安裝

     sudo make install

等安裝完成后輸入

$ which git  //查看安裝目錄

$ git –version  //查看版本

檢查安裝是否成功,如果看到如圖的輸出,安裝就成功了。

Git安裝git

tar zxvf git-1.8.4.2.tar.gz

cd git-{date} 我這里是git-1.8.4.2的版本,所以我的命令是cd git-1.8.4.2/

autoconf

./configure

make

make install

make和make install在這里最好分開執行,免得有錯不知道.

git --version

git version 1.7.10

首先注冊一個github賬號

打開git bash進入命令窗口

$ cd ~/.ssh//檢查計算機ssh密鑰

如果沒有提示:No such file or directory 說明你不是第一次使用git,執行下面的操作,清理原有ssh密鑰

$ ls//查看目錄下是否存在ssh密鑰

生成ssh密鑰

$ ssh-keygen -t rsa -C ‘xxx@xxx.xxx’//填寫email地址,然后一直“回車”ok

$ cat id_rsa.pub   //查看生成ssh密鑰內容復制

用申請的github賬號登陸github系統。點擊右上角的 Account Settings--->SSH Public keys ---> add another public keys,把復制的ssh密鑰填寫進去,點擊 add key 就ok了。

接着打開git ,測試連接是否成功

$ ssh -T git@github.com

如果提示:Hi defnngj You've successfully authenticated, but GitHub does not provide shell access. 說明你連接成功了。

設置用戶信息

$ git config --global user.name "HavenShen"//給自己起個用戶名

$ git config --global user.email  "havenshen@gmail.com"//填寫自己的郵箱

回到github首頁,點擊頁面右下角“New Repository”。

填寫項目信息:

project name: hello world

description : my first project

點擊“Create Repository” ; 現在完成了一個項目在github上的創建。

 

克隆項目

我們需要使用git在本地克隆一個相同的項目。

打開git bash進入命令窗口

$ git clone git@github.com:HavenShen/hello-world.git

 

使用git clone git@github.com:HavenShen/hello-world.git就把git遠程倉庫的項目克隆到本地了。

初始化項目

$ cd hello-world//進入項目目錄

$ git init//命令主要用於創建一個空的git倉庫或者重新初始化一個已存在的倉庫。

測試上傳一個文件

基本操作

$ touch hello-world.txt//創建一個txt文件

$ git add hello-world.txt//執行add添加操作

$ git commit -m 'first commit'//提交更新,並注釋信息“first commit”

$ git push -u origin master   //將本地項目更新到github項目上去

進入github網站查看遠程倉庫里就多了一個 hello-world.txt文件。

 

分支

查看分支

$ git branch//查看分支

 

以上master是默認主干*表示當前工作目錄在master主干操作

創建新的分枝

$ git branch experiment//創建新分支

$ git branch//查看分支

 

可以看到現在多了一個experiment分支。

切換分支

$ git checkout experiment//切換到experiment分支

 

以上命令就切換到experiment分支目錄下可以進行操作了。

$ touch branch.txt//創建一個txt文件

$ git add branch.txt//執行add添加操作

$ git commit -m 'branch commit'//提交更新,並注釋信息“branch commit”

$ git push -u origin experiment//更新到github experiment分支項目上去

打開github官網查看hello-world遠程倉庫

Master倉庫

 

Experiment倉庫

 

可以看出experiment倉庫比master倉庫多了一個branch.txt文件也就是我們剛在experiment倉庫中創建、更新、提交、發布到遠程倉庫的branch.txt

合並和移除無用分枝

$ git checkout master//切換到master倉庫

$ git merge experiment//把experiment倉庫合並到master倉庫

$ git push -u origin master//發布遠程倉庫master上

 

上圖可以看到master多了一個從experiment分支中合並過來的一個branch.txt文件。

刪除分支

$ git branch –d experiment//刪除分支

$ git branch//查看分支

 

上圖可以看到experiment分支已經刪除了。

以上操作基本上可以滿足日常操作。

附:

標簽

標簽可以針對某一時間點的版本做標記,常用於版本發布。

列出標簽

$ git tag # 在控制台打印出當前倉庫的所有標簽

$ git tag -l 'v0.1.*' # 搜索符合模式的標簽

打標簽

git標簽分為兩種類型:輕量標簽和附注標簽。輕量標簽是指向提交對象的引用,附注標簽則是倉庫中的一個獨立對象。建議使用附注標簽。

# 創建輕量標簽

$ git tag v0.1.2-light

# 創建附注標簽

$ git tag -a v0.1.2 -m "發布0.1.2版本"

創建輕量標簽不需要傳遞參數,直接指定標簽名稱即可。

創建附注標簽時,參數a即annotated的縮寫,指定標簽類型,后附標簽名。參數m指定標簽說明,說明信息會保存在標簽對象中。

切換到標簽

與切換分支命令相同,用git checkout [tagname]

查看標簽信息

用git show命令可以查看標簽的版本信息:

$ git show v0.1.2

刪除標簽

誤打或需要修改標簽時,需要先將標簽刪除,再打新標簽。

$ git tag -d v0.1.2 # 刪除標簽

參數d即delete的縮寫,意為刪除其后指定的標簽。

補打標簽

打標簽不必要在head之上,也可在之前的版本上打,這需要你知道某個提交對象的校驗和(通過git log獲取)。

# 補打標簽

$ git tag -a v0.1.1 9fbc3d0

標簽發布

通常的git push不會將標簽對象提交到git服務器,我們需要進行顯式的操作:

$ git push origin v0.1.2 # 將v0.1.2標簽提交到git服務器

$ git push origin --tags # 將本地所有標簽一次性提交到git服務器

日志

git log  查看 當前分支的 提交歷史

在提交了若干更新之后,想回顧下提交歷史,可以使用 git log 命令查看

默認不用任何參數的話,git log 會按提交時間列出所有的更新,最近的更新排在最上面。看到了嗎,每次更新都有一個 SHA-1 校驗和、作者的名字 和 電子郵件地址、提交時間,最后縮進一個段落顯示提交說明。

git log 有許多選項可以幫助你搜尋感興趣的提交,接下來我們介紹些最常用的。

我們常用 -p 選項 展開顯示每次提交的內容差異,用 -2 則僅顯示最近的兩次更新:

$ git log -p -2

此外,還有許多摘要選項可以用,比如 --stat,僅簡要的顯示 文件 增改行數統計,每個提交都列出了修改過的文件,以及其中添加和移除的行數,並在最后列出所有增減行數小計。

$ git log --stat

--author 僅顯示指定作者相關的提交。

$ git log  --author=haiwang

  查找 haiwang 提交的 版本;

差異

git diff

可以用來比較:

1.staging area和working area的文件 (無其他參數時)

[plain] view plaincopyprint?

git diff 

2.master分支和working area的文件 (用master參數)

[plain] view plaincopyprint?

git diff master  

3.HEAD指向的內容和working area的文件

[plain] view plaincopyprint?

git diff HEAD 

4.用遠程master分支比較當前工作區

[plain] view plaincopyprint?

git diff refs/remotes/origin/master 

5.經常還要用到master分支的某個文件的歷史版本和working area的該文件的比較

[plain] view plaincopyprint?

git diff 0c5ee16a6a4c849d0ae0448caa8ff174399c7c3c ./socket_helper.cpp 

上面的命令中, diff后面的參數指的是commit id, ./socket_helper.cpp是要比較的文件路徑。

diff的命令輸出格式注意:

[plain] view plaincopyprint?

---代表源文件 

+++代表目標文件 

通常working area的文件都是被當作目標文件來看待。

-開頭的行,是只出現在源文件中的行

+開頭的行,是只出現在目標文件中的行

空格開頭的行,是源文件和目標文件中都出現的行

差異按照差異小結進行組織,每個差異小結的第一行都是定位語句,由@@開頭,@@結尾。

1.某個提交記錄0c5ee代表的socket_helper.cpp文件是源文件,當前working area的socket_helper文件是目標文件。

2.在源文件第4行開始的6行和目標文件第4行開始的7行構成一個差異小結

3.這個差異小結中,目標文件添加了一行#include "helper/time_measure.h"

4.其他空格開頭的行表明沒有差異。

Git fetch和git pull

Git中從遠程的分支獲取最新的版本到本地有這樣2個命令:

1. git fetch:相當於是從遠程獲取最新版本到本地,不會自動merge

git fetch origin master

git log -p master..origin/master

git merge origin/master

以上命令的含義:

   首先從遠程的origin的master主分支下載最新的版本到origin/master分支上

   然后比較本地的master分支和origin/master分支的差別

   最后進行合並

  上述過程其實可以用以下更清晰的方式來進行:

       git fetch origin master:tmp

git diff tmp

git merge tmp

  從遠程獲取最新的版本到本地的test分支上之后再進行比較合並

2. git pull:相當於是從遠程獲取最新版本並merge到本地

       git pull origin master

上述命令其實相當於git fetch 和 git merge

在實際使用中,git fetch更安全一些

因為在merge前,我們可以查看更新情況,然后再決定是否合並

結束

遠程倉庫相關命令

檢出倉庫:$ git clone git://github.com/jquery/jquery.git

查看遠程倉庫:$ git remote –v

添加遠程倉庫:$ git remote add [name] [url]

刪除遠程倉庫:$ git remote rm [name]

拉取遠程倉庫:$ git pull [remoteName] [localBranchName]

推送遠程倉庫:$ git push [remoteName] [localBranchName]

分支(branch)操作相關命令查看本地分支:$ git branch

查看遠程分支:$ git branch –r

創建本地分支:$ git branch [name] ----注意新分支創建后不會自動切換為當前分支

切換分支:$ git checkout [name]

創建新分支並立即切換到新分支:$ git checkout -b [name]

刪除分支:$ git branch -d [name] ---- -d選項只能刪除已經參與了合並的分支,對於未有合並的分支是無法刪除的。如果想強制刪除一個分支,可以使用-D選項

合並分支:$ git merge [name] ----將名稱為[name]的分支與當前分支合並創建遠程分支

(本地分支push到遠程):$ git push origin [name]

刪除遠程分支:$ git push origin :heads/[name]

版本(tag)操作相關命令查看版本:$ git tag

創建版本:$ git tag [name]

刪除版本:$ git tag -d [name]

查看遠程版本:$ git tag –r

創建遠程版本(本地版本push到遠程):$ git push origin [name]

刪除遠程版本:$ git push origin :refs/tags/[name]

子模塊(submodule)相關操作命令添加子模塊:$ git submodule add [url] [path]

初始化子模塊:$ git submodule init  ----只在首次檢出倉庫時運行一次就行

更新子模塊:$ git submodule update ----每次更新或切換分支后都需要運行一下

刪除子模塊:$ git rm --cached [path]

忽略一些文件、文件夾不提交在倉庫根目錄下創建名稱為“.gitignore”的文件,寫入不需要的文件夾名或文件,每個元素占一行即可,如targetbin*.db

閱讀資料

http://www.cnblogs.com/zhangjing230/archive/2012/05/09/2489745.html#git

http://fsjoy.blog.51cto.com/search.php?

http://www.csser.com/tag/git/boards


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM