GIT

GIT

GIT簡單介紹

  • GIT:是一款開源的分布式版本控制工具

  • 在所有的分布式的版本控制工具中,git是最快、最簡單、最流行的

  • git起源

    • 作者:Linux之父 ,Linux Benedict Torvalds,2005年
    • 開始Linux是用Bitkeeper管理的,開發git僅僅是為了輔助Linux內核的開發(管理源代碼),10天的時間就把git寫完了,第一次導入到git的代碼大約有5000萬行的代碼
  • git現狀

    • 在國外已經非常普及
    • 越來越多的開源項目已經轉移到git上面
    • 比如:php
  • 其他版本控制工具

    • CVS

      • 最早的開源、免費的集中式版本控制工具
      • 自身設計有問題,會造成提交文件不完整,版本庫莫名其妙的損害
    • SVN

      • 修正了CVS的一些穩定性問題,是目前用的最多的集中式版本控制工具
    • ClearCase

      • 收費的集中式版本控制工具,安裝比Windows還大,運行比蝸牛還慢
      • 人傻錢多的公司,世界五百強
    • VSS

      • 微軟的集中式版本控制工具,集成在Visual Studio中
      • 這個工具很好用,比Xcode相對智能
  • 集中式版本控制和分布式版本控制的區別

    • 集中式版本控制

      • 倉庫放在服務器端
      • checkout獲得倉庫,commit提交
      • 不管有多少個終端,所有的操作都需要和服務器進行交互
      • 倉庫是集中式的放到服務器上,做任何操作都需要連接上服務器,沒有網絡就不能連接了,在公司里面做開發,一般是局域網,只能在公司加班,在公司才能連接服務器,才能提交
    • 分布式版本控制

      • 可以把在自己的電腦理解成服務器
      • 共享倉庫放在一個遠程的服務器上的
      • 本地電腦上也有一個倉庫,可以先把操作提交到本地的倉庫,push /pull,操作的時候可以先不用連接上服務器,可以先提交到本地倉庫,等有網絡的時候,可以一次性提交到遠程的服務器上
  • GIT和SVN對比
    • 速度:在很多情況下,git的速度遠遠比SVN塊
    • 結構:SVN是集中式管理,git是分布式管理
    • 其他:
      • svn使用分支比較笨拙
      • git可以輕松擁有無限個分支
      • svn必須要聯網才能正常工作
      • git支持本地版本控制工作
      • 舊版本的svn會在每一個目錄放置一個.svn
      • git只會在根目錄擁有一個.git
    • 工作流程
      • SVN
        • 服務器端
        • 客戶端 checkout commit update
      • GIT
        • 共享版本庫
        • 客戶端
        • clone 下載到本地
        • 可以在本地修改,可以在本地提交commit,把本地的版本庫提交到共享的版本庫push
        • 獲得最新的共享版本庫信息pull
    • 最大的區別在于:在分布式下開發者可以本地提交,每個開發者機器上都有一個服務器的數據庫

GIT的初始化和訪問設置

  • 在本地初始化一個本地的git倉庫
    • 本地創建一個文件夾GIT
    • GIT文件夾里新建文件夾
      • manager
        • demo初始化一個本地git倉庫
        • cd 來到demo路徑
        • git init
        • 生成了一個.git的隱藏的文件夾
  • 對該git倉庫進行配置(用戶名和郵箱)
    • 用戶名 $ git config user.name "manager"
    • 郵箱 $ git config user.email "manager@126.com"
    • 輸入命令行
    • 打開config查看配置文件
  • 配置一個全局的用戶名和郵箱
    • 系統里面會有很多倉庫,使用全局的就不用每個倉庫都設置
    • $ git config -- global user.name "xiaomage"
    • $ git config -- global user.email "xiaomage@126.com"
    • 打開.gitconfig

GIT倉庫項目初始化操作

  • 項目經理創建一個文件main.m
    • $ touch main.m
  • 查看git狀態
    • $ git status
    • 查看是否被git管理
    • 紅色:表示該文件并沒有被git倉庫管理
  • 把main.m文件 提交到git倉庫的暫緩區
    • 暫緩區的概念
    • $ git add main.m
  • 查看狀態
    • $ git status
    • 綠色:表示該文件已經被添加到git的暫緩區中
    • 注意:文件的更改必須要先添加到暫緩區里面,才能從暫緩區提交
  • 先把main.m提交到本地的版本庫中
    • $ git commit - m "注釋" main.m
    • master:表示當前是主干
  • 修改文件的內容
    • echo "I am Main" >>main.m
    • cat main.m
  • 重新查看文件狀態
    • $ git status
    • 紅色:表示被修改modified,當前的修改,沒有在暫緩區中
  • 把本地的修改提交到暫緩區中
    • $ git add main.m
  • 查看文件狀態
  • 把暫緩區中的修改提交到本地的版本庫中
    • $ git commit - m "修改了main文件"main.m
    • 一個文件被修改了,一個文件被插入
  • 結論:之前使用SVN的時候,只有新創建的文件才需要add操作,修改文件是不需要進行add操作的,但是在git中,不管是新創建文件,還是修改了某個文件都需要再做一次add操作,就是把修改提交到暫緩區

GIT工作原理

  • 工作區(working directory)
    • 倉庫文件夾里除了.git目錄以外的內容
  • 版本庫(Repository)
    • .git目錄,用于存儲記錄版本信息
    • 暫緩區(stage)
    • 分支(master):git自動創建的第一個分支
    • HEAD指針:用于指向當前分支
      • HEAD指向誰,誰就是當前的分支
  • git add 和git comit 原理
    • git add:把文件修改或者新添加的文件添加到暫緩區
    • git commit :把暫緩區的所有內容提交到當前分支

GIT起別名的操作

  • SVN簡寫
    • update - up
    • status - st
    • checkout - co
    • commit - ci
    • remove - rm
  • GIT
    • GIT里面沒有簡寫
    • git -- help
    • git提供了更加強大的功能,可以重命名
    • $ git config alias.st "status"
      • 相當于status == st
    • $ git config alias.ci "commit"
      • commit == ci
    • $ git config alias.ci "commit - m"
      • commit - m == ci
    • 別名可以隨便起,但是不能有中文
    • 起的別名在config配置文件里面
    • 上面配置的只是當前的倉庫,在其他的倉庫中這些簡寫是不可用的
    • 全局的別名
      • $ git config -- global alias.st "status"

GIT刪除文件

  • cd
  • ls -la
  • 刪除文件
    • 項目經理需要刪除文件
      • $ git rm 文件名稱1 文件名2
    • 刪除操作在工作區里面進行的
  • 查看文件的狀態,是綠色的
    • $ git status
    • 綠色:該修改已經被提交到暫緩區里面,不需要add操作
  • 把刪除操作提交奧本地的版本庫
    • $ git commit- m "刪除文件"
    • 一個文件被修改,一個文件被刪除

查看版本信息

  • SVN
    • log
  • GIT查看版本信息(基本版)
    • $ git log
    • :表示沒有顯示完全,按下箭頭就可以查看后面的信息
    • 版本信息里有什么內容
      • 注釋
      • 誰修改的
      • 什么時候修改的
      • commit bf78……后面的內容是版本號
        • 散列計算得到的,sha
        • 散列值是版本號
    • 按住Q退出
  • CIT查看版本信息(加強版)
    • 在之前的基礎上還可以查看版本回退信息
    • $ git reflog
    • 更簡潔
      • HEAD
      • commit后面是注釋
      • 最前面的是不完整的版本號,只有前七位
      • 可以看到版本回退信息,直接log是看不到的

版本回退的兩種情況

  • 本地倉庫修改了內容,但是修改還沒有提交到版本庫(相當于取消修改)
    • $ git reset -- hard HEAD
    • ls - la
    • echo
    • cat
    • git status
    • git add
    • git reset -- hard HEAD
  • 本地倉庫修改了內容,并且修改已經被提交到版本庫(回退到以前的版本)
    • $ git reset -- hard HEAD^回退到上一個版本

    • $ git reset --hard HEAD^^回退到上兩個版本

    • $ git reset -- hard HEAD ~ N 回退到上N個版本

    • $ git reset -- hard 五位數字的版本號 指向任意的版本

      • 拷貝前面五位數

創建共享版本庫并初始化項目(忽略操作)

  • 創建共享版本庫
    • 可以安裝在服務器端 非常復雜(后臺)
    • 可以安裝在一個文件夾里面
    • 安裝在U盤里面(自己查看資料)
    • 把git遠程倉庫,托管在一些大型的網站上面(github/oschina)
  • 在桌面創建一個文件夾(路徑不能有中文), 把遠程倉庫把它安裝在該文件夾中
    • 先初始化一個遠程倉庫
      • 初始化本地和初始化遠程倉庫區別?
      • 初始化遠程倉庫 git -- bare init
      • 本地倉庫有一個.git文件,遠程的共享倉庫,沒有.git文件
      • 遠程倉庫bare= true ;本地倉庫bare = faulse
    • 創建一個空的文件夾(項目經理的客戶端),項目經理連接上共享版本庫,然后把共享版本庫下載到本地
      • $ git clone 倉庫路徑
    • 項目經理配置本地倉庫
      • 設置用戶名和郵箱
      • $ git config user.name "manager"
      • $ git config user.email "manager@qq.com"
      • 打開config文件查看
    • 創建一個忽略文件,進行忽略處理
      • 新建一個文件$ touch .gitignore,拷貝內容到該文件中
      • github- 搜索.gitignore
        • 框架 找到oc的
        • 拷貝內容到創建的.gitignore文件中
      • 查看文件狀態,把該文件添加到暫緩區
        • git status
        • git add .gitignore
      • 把更改提交到本地的版本庫
        • git commit - m"進行忽略操作" .gitignore
    • 使用Xcode創建一個新的項目
      • 已經有一個git倉庫了,不能再創建了
      • 查看狀態,內部會自動做一次 添加操作
      • 用Xcode創建的項目,默認會做一次add操作
        • 如果一次性添加多個文件
          • $ git add .
      • 把文件提交到本地 git commit -m "項目初始化處理"
      • 把本地版本庫的內容,提交到共享版本庫Server
        • $ git push
        • 共享版本庫是數據庫,是以數據源的方式存儲
    • 張三連接上共享版本庫,下載到本地
      • git clone
    • 更新 pull

Xcode多人開發和沖突處理

  • 項目經理
    • discard all changes 取消文件修改
    • pull
    • 項目經理開始開發,提交commit到本地的版本庫
    • push提交到共享的版本庫
  • 張三
    • pull
    • push
  • 沖突

    • 項目經理和張三修改了同一行代碼
      • 如果提交成功了,可能就是沒有給項目經理和張三分配用戶名和郵箱
      • 解決沖突
    • 張三添加了注釋,提交了
    • 項目經理pull,更新獲得最新的
  • git倉庫對于靜態庫的處理

    • svn對于靜態庫不識別.a文件
    • git不需要手動添加,內部會自動的做添加操作

把git遠程倉庫托管在github上面

  • 注冊github

  • 創建一個倉庫

    • 點擊加號
    • 倉庫名稱repository name
    • 描述信息:description
    • 開源public | 私有 private(每一月幾百元)
    • initialize this repository readme 要不要裝readme文件
    • 選擇要忽略的文件object-c
    • 協議:MIT Licence
      • 點擊后面的i,可以查看協議的具體內容
    • create repository
  • 初始化處理

    • 連接上倉庫,把倉庫下載到本地
      • clone or download
        • HTTPS
        • SSH:秘鑰對的方式處理的
          • 公鑰放在網站上
          • 私鑰放到電腦里
        • 拷貝url,打開xcode,preperence,切換到賬號,把拷貝的路徑,粘貼到address上
        • 用戶名和密碼是github的用戶名(郵箱)和密碼
        • checkout
        • next
    • 不需要做忽略和添加操作
    • 項目的初始化處理commit and push

github刪除代碼倉庫

  • commits提交的次數
  • branch 分支
  • releases 備份信息
  • fork復制一份倉庫到本地
  • pull requests 請求合并
  • Wiki 公共界面,介紹框架的基本信息
  • graphs 貢獻度
  • 刪除:setting 最后面 delete this repository 需要輸入要刪除的倉庫的名稱
  • 刪除操作是不可逆的
  • issues github上面提問題
    • new
    • submit new issues
  • github上提意見
  • 注意:在使用別人框架的時候,自己修改框架,對框架的原作者發送一個請求,請求合并自己的代碼
    • 復制fork到個人賬號
    • 下載clone download
    • check out
    • 下載下來之后就可以修改框架了
    • new pull requests
    • 跳轉到原作者界面,請求標題,添加描述信息
    • create pull request
    • 請求合并的操作會在

創建項目導入已有項目

  • 問題:顯示的都是?,不能識別文件,需要手動的全部添加進去
    • cd 倉庫路徑
    • git st 紅色
    • git add .
    • git st 綠色
    • 能夠識別了

托管到github上SSH認證

  • 秘鑰對
  • SSH路徑拷貝一份,認證信息要選中SSH Keys
  • Public Key
    • finder - 前往 - 個人 .ssh隱藏文件 - 刪除里面的內容
  • Private Key
  • 如何生成公鑰和私鑰
    • settings
    • SSH ahd GPG keys
    • generating an ssh keys
    • 命令行
      • 拷貝,后面改成自己的郵箱
      • rsa 算法
      • 保存的位置:可以不輸入
      • 密碼可以不輸入
      • 生成秘鑰的標識,出現一個正方形
      • id_rsa
      • id_rsa_pub拷貝一份到網站上
        • 打開方式,文本編輯,全選拷貝
        • 回到設置界面,new ssh key
          • 標題可以隨便寫
          • 把復制的信息粘貼到key欄
  • 復制路徑,打開Xcode,偏好設置,tepe:git
    認證方式:SSH 再把倉庫下載下來

github中使用tags標簽備份

  • 命令行
    • cd
    • 查看當前有沒有備份信息
      • git tag
    • 對當前版本進行備份
      • $ git tag - a MOMO1.0 - m"MOMO1.0"
    • 把本地的提交到共享版本庫
      • $ git push orgin MMO1.0
      • YES
      • [new tag]表示新創建了一個tag
      • release 里面查看備份信息

OSChina

  • 碼云
  • 新建項目
  • 項目名稱
  • 項目介紹
  • 項目語言
  • GitIgnore
  • 開源許可證
  • 項目屬性:私有項目
  • ReadMe
  • 連接倉庫 HTTPS |SSH
  • 拷貝路徑
  • 偏好設置,倉庫
  • 賬號的用戶名和密碼
  • 同樣的方式生成秘鑰對
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,690評論 4 54
  • 最近發生了兩件事情,讓我發現其實有時候換一種說法,好像很好用 帶寶寶去上樂高課,不知道是不是因為長期不上幼兒園,他...
    尚琳閱讀 201評論 0 0
  • 高血壓175,低壓110,心臟病嚴重,所有人都讓我進醫院治療,可是錢在哪里呀?再說我從來也不相信什么退壓藥,救心丸...
    郭帥_f900閱讀 227評論 0 1
  • 社會上對房產中介的印象大多不好,覺得這是一個到處是坑不停讓人貼錢的行業,事實上有時候確實如此,租賣房子本身就是不停...
    商小樓閱讀 213評論 0 1
  • 我有一個暗戀的人。 就是這樣。這一年,我高三,他大一。 我在書山題海中穿梭,他在訓練學習中忙碌。 我在四川,他在湖...
    W某傻傻傻傻傻閱讀 169評論 0 0