GIT

GIT

GIT簡單介紹

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

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

  • git起源

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

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

    • CVS

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

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

      • 收費的集中式版本控制工具,安裝比Windows還大矢劲,運(yùn)行比蝸牛還慢
      • 人傻錢多的公司赦拘,世界五百強(qiáng)
    • VSS

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

    • 集中式版本控制

      • 倉庫放在服務(wù)器端
      • checkout獲得倉庫躺同,commit提交
      • 不管有多少個終端,所有的操作都需要和服務(wù)器進(jìn)行交互
      • 倉庫是集中式的放到服務(wù)器上丸逸,做任何操作都需要連接上服務(wù)器蹋艺,沒有網(wǎng)絡(luò)就不能連接了,在公司里面做開發(fā)黄刚,一般是局域網(wǎng)捎谨,只能在公司加班,在公司才能連接服務(wù)器憔维,才能提交
    • 分布式版本控制

      • 可以把在自己的電腦理解成服務(wù)器
      • 共享倉庫放在一個遠(yuǎn)程的服務(wù)器上的
      • 本地電腦上也有一個倉庫涛救,可以先把操作提交到本地的倉庫,push /pull,操作的時候可以先不用連接上服務(wù)器业扒,可以先提交到本地倉庫检吆,等有網(wǎng)絡(luò)的時候,可以一次性提交到遠(yuǎn)程的服務(wù)器上
  • GIT和SVN對比
    • 速度:在很多情況下凶赁,git的速度遠(yuǎn)遠(yuǎn)比SVN塊
    • 結(jié)構(gòu):SVN是集中式管理咧栗,git是分布式管理
    • 其他:
      • svn使用分支比較笨拙
      • git可以輕松擁有無限個分支
      • svn必須要聯(lián)網(wǎng)才能正常工作
      • git支持本地版本控制工作
      • 舊版本的svn會在每一個目錄放置一個.svn
      • git只會在根目錄擁有一個.git
    • 工作流程
      • SVN
        • 服務(wù)器端
        • 客戶端 checkout commit update
      • GIT
        • 共享版本庫
        • 客戶端
        • clone 下載到本地
        • 可以在本地修改,可以在本地提交commit,把本地的版本庫提交到共享的版本庫push
        • 獲得最新的共享版本庫信息pull
    • 最大的區(qū)別在于:在分布式下開發(fā)者可以本地提交虱肄,每個開發(fā)者機(jī)器上都有一個服務(wù)器的數(shù)據(jù)庫

GIT的初始化和訪問設(shè)置

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

GIT倉庫項目初始化操作

  • 項目經(jīng)理創(chuàng)建一個文件main.m
    • $ touch main.m
  • 查看git狀態(tài)
    • $ git status
    • 查看是否被git管理
    • 紅色:表示該文件并沒有被git倉庫管理
  • 把main.m文件 提交到git倉庫的暫緩區(qū)
    • 暫緩區(qū)的概念
    • $ git add main.m
  • 查看狀態(tài)
    • $ git status
    • 綠色:表示該文件已經(jīng)被添加到git的暫緩區(qū)中
    • 注意:文件的更改必須要先添加到暫緩區(qū)里面,才能從暫緩區(qū)提交
  • 先把main.m提交到本地的版本庫中
    • $ git commit - m "注釋" main.m
    • master:表示當(dāng)前是主干
  • 修改文件的內(nèi)容
    • echo "I am Main" >>main.m
    • cat main.m
  • 重新查看文件狀態(tài)
    • $ git status
    • 紅色:表示被修改modified,當(dāng)前的修改咏窿,沒有在暫緩區(qū)中
  • 把本地的修改提交到暫緩區(qū)中
    • $ git add main.m
  • 查看文件狀態(tài)
  • 把暫緩區(qū)中的修改提交到本地的版本庫中
    • $ git commit - m "修改了main文件"main.m
    • 一個文件被修改了斟或,一個文件被插入
  • 結(jié)論:之前使用SVN的時候,只有新創(chuàng)建的文件才需要add操作集嵌,修改文件是不需要進(jìn)行add操作的萝挤,但是在git中御毅,不管是新創(chuàng)建文件,還是修改了某個文件都需要再做一次add操作怜珍,就是把修改提交到暫緩區(qū)

GIT工作原理

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

GIT起別名的操作

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

GIT刪除文件

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

查看版本信息

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

版本回退的兩種情況

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

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

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

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

      • 拷貝前面五位數(shù)

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

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

Xcode多人開發(fā)和沖突處理

  • 項目經(jīng)理
    • discard all changes 取消文件修改
    • pull
    • 項目經(jīng)理開始開發(fā)印蓖,提交commit到本地的版本庫
    • push提交到共享的版本庫
  • 張三
    • pull
    • push
  • 沖突

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

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

把git遠(yuǎn)程倉庫托管在github上面

  • 注冊github

  • 創(chuàng)建一個倉庫

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

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

github刪除代碼倉庫

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

創(chuàng)建項目導(dǎo)入已有項目

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

托管到github上SSH認(rèn)證

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

github中使用tags標(biāo)簽備份

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

OSChina

  • 碼云
  • 新建項目
  • 項目名稱
  • 項目介紹
  • 項目語言
  • GitIgnore
  • 開源許可證
  • 項目屬性:私有項目
  • ReadMe
  • 連接倉庫 HTTPS |SSH
  • 拷貝路徑
  • 偏好設(shè)置,倉庫
  • 賬號的用戶名和密碼
  • 同樣的方式生成秘鑰對
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蕊肥,一起剝皮案震驚了整個濱河市谒获,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌壁却,老刑警劉巖批狱,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異展东,居然都是意外死亡赔硫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門盐肃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爪膊,“玉大人,你說我怎么就攤上這事砸王⊥剖ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵处硬,是天一觀的道長小槐。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么凿跳? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任件豌,我火速辦了婚禮,結(jié)果婚禮上控嗜,老公的妹妹穿的比我還像新娘茧彤。我一直安慰自己,他們只是感情好疆栏,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布曾掂。 她就那樣靜靜地躺著,像睡著了一般壁顶。 火紅的嫁衣襯著肌膚如雪珠洗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天若专,我揣著相機(jī)與錄音许蓖,去河邊找鬼。 笑死调衰,一個胖子當(dāng)著我的面吹牛膊爪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嚎莉,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼米酬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了趋箩?” 一聲冷哼從身側(cè)響起赃额,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叫确,沒想到半個月后爬早,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡启妹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年筛严,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饶米。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡桨啃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出檬输,到底是詐尸還是另有隱情照瘾,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布丧慈,位于F島的核電站析命,受9級特大地震影響主卫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鹃愤,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一簇搅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧软吐,春花似錦瘩将、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肖抱,卻和暖如春备典,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背意述。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工熊经, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欲险。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像匹涮,于是被迫代替她去往敵國和親天试。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git然低,從https:/...
    落魂灬閱讀 12,665評論 4 54
  • 最近發(fā)生了兩件事情喜每,讓我發(fā)現(xiàn)其實有時候換一種說法,好像很好用 帶寶寶去上樂高課雳攘,不知道是不是因為長期不上幼兒園带兜,他...
    尚琳閱讀 191評論 0 0
  • 高血壓175,低壓110,心臟病嚴(yán)重喧兄,所有人都讓我進(jìn)醫(yī)院治療无畔,可是錢在哪里呀?再說我從來也不相信什么退壓藥,救心丸...
    郭帥_f900閱讀 219評論 0 1
  • 社會上對房產(chǎn)中介的印象大多不好,覺得這是一個到處是坑不停讓人貼錢的行業(yè)拯辙,事實上有時候確實如此郭变,租賣房子本身就是不停...
    商小樓閱讀 203評論 0 1
  • 我有一個暗戀的人。 就是這樣。這一年诉濒,我高三周伦,他大一。 我在書山題海中穿梭循诉,他在訓(xùn)練學(xué)習(xí)中忙碌横辆。 我在四川,他在湖...
    W某傻傻傻傻傻閱讀 164評論 0 0