歷史
Linux開源項目使用bitkeeper分佈式版本控制系統來管理和維護代碼,bitkeeper與Linux終止合作關係後,Linux團隊開發了自己的分佈式版本控制系統git。
git和svn的區別:
①svn是集中式管理工具,必須連接到服務器上才能進行代碼的提交、修改等操作,如果出現單點故障,就無法繼續正常工作。②git是分佈式管理工具,沒有中央服務器,每個人的電腦就是一個完整的版本庫。
git工作流程
①從遠程倉庫clone資源到本地倉庫。
②從本地倉庫中checkout代碼到工作區然後進行代碼修改。
③在提交前先將代碼從工作區add到暫存區。
④提交修改,從暫存區commit到本地倉庫,本地倉庫中保存修改的各個歷史版本。
⑤修改完成後,需要和團隊共享代碼時,可以將代碼push到遠程倉庫。
安裝
之前安裝過了,很久沒有用,打開命令行,用git clone https://github.com/git/git
更新一下git的版本。
更新完畢後通過git --version
查詢當前版本
還需要下載一個tortoisegit
安裝時注意這一步選ssh
安裝語言包後refresh就有中文了
目錄就選git的bin目錄
用戶名和郵箱隨便填就行了,下一步確定左邊選項是SSH,然後點完成
本地倉庫
創建本地倉庫
可以在桌面新創建目錄repository/repo1,右鍵git bash here,使用git init
,之後會出現一個.git
目錄(需要顯示隱藏項目)
向本地倉庫添加文件
.git就是本地版本庫,包含.git的目錄repo1就是工作目錄,添加的文件應該放在工作目錄下,也就是repo1中。
創建一個hello.txt,隨便輸入一些字符,按以下步驟添加
點擊確定後提示添加完成,點擊確定,此時文件就加入了暫存區
將文件從暫存區提交至本地倉庫,右鍵選擇提交
必須要添加日誌信息,然後提交
重啓後會發現提交的hello.txt多了綠色的勾,很不爽的是其他文件都給我標上了問號。。
這時把C:/Users/用戶名/.git文件夾刪掉刷新就可以了
修改本地倉庫文件內容並提交
如果修改了文件內容,會變成紅色的感嘆號
再次提交,添加對應的日誌信息
提交成功後又變成綠色
通過顯示日誌可以查看修改信息
刪除本地倉庫文件和恢復
直接右鍵刪除
如果需要恢復:
如果想要真正地刪除掉,則刪除後進行一次提交,此時便徹底刪除無法恢復
將Java工程添加到本地倉庫
向將Java工程拷貝到本地倉庫目錄下
右鍵添加到暫存區
將無用的.idea和out目錄忽略掉
選擇保留本地文件,然後將.gitnore添加,最後返回上一級目錄提交
成功提交
遠程倉庫
在github創建遠程倉庫
注意不要勾選使用readme初始化
創建SSH密鑰並在GitHub配置公鑰
在本地倉庫通過ssh-keygen -t rsa
創建密鑰
一般創建在用戶的.shh目錄下
記事本打開.pub結尾的公鑰,在GitHub的設置裏配置
使用SSH方式將本地倉庫推送到遠程
打開剛纔創建的遠程倉庫,找到推送本地倉庫的命令
在本地倉庫使用命令行推送
再次刷新後發現exam工程已被推送進來
使用tortoisegit
創建一個新的遠程倉庫
在本地倉庫右鍵git 同步
點擊管理
配置時先將網絡的ssh客戶端設置爲本機git下的ssh.exe
設置遠端url爲遠程倉庫url,putty密鑰是之前ssh密鑰中不帶pub結尾的私鑰
之後確定,然後點擊推送
刷新myRepo2遠程倉庫,已經被推送進來
使用https推送
再創建一個新的倉庫
在本地倉庫使用tortoisegit,配置遠端,url爲遠程倉庫的https地址,直接複製瀏覽器地址欄就行
點擊確定,選是,然後推送
克隆遠程倉庫到本地
使用SSH
複製該地址,在本地倉庫打開bash命令行,使用git clone 複製的地址
進行clone
使用HTTPS
右鍵git克隆
將https地址複製到url欄
克隆成功
推送/拉取修改的文件
在本地倉庫創建一個update.txt,然後添加到暫存區,添加到本地倉庫,推送到遠程倉庫
刷新遠程倉庫,已更新
本地倉庫拉取已更新的文件
在git同步裏選擇拉取即可
文件衝突問題
現在repo1和myRepo中都有update.txt文件,分別對其修改並提交到本地倉庫
repo1提交後,再推送到遠程倉庫,推送成功
之後在myRepo中修改,並提交本地
提交成功
但是推送至遠程倉庫時會失敗,因爲遠程倉庫update.txt已經被repo1修改過,現在myRepo中不是最新的了,類似於Java的CAS機制。。repo1和myRepo都取到的是update.txt,同時修改,repo1要更新時發現沒被更新過,直接更新,myRepo更新時發現已經被更新了,所以推送失敗。。
不能推送,選擇拉取
選擇解決衝突
打開文件把這3行刪掉
只會提交到本地倉庫,然後推送
此時遠程倉庫中成功更新
私有遠程倉庫
創建Linux上的私有git服務器
我使用的是centos8的虛擬機
使用yum install git
下載並安裝git
安裝完畢後用git --version
查詢安裝版本
adduser -r -c 'git version control' -d /home/git -m git
在/home/git創建git用戶,然後更改git用戶的密碼
切換到git用戶 cd進到主目錄 創建一個repo1倉庫
使用git init --bare
初始化
推送至linux遠程倉庫
在windows的本地倉庫推送,將url進行如下設置,192.168.2.142是我虛擬機的ip地址
(我壓根沒想到能連上 我虛擬機是橋接模式 我不知道ip地址怎麼找 用secureCRT連了一下午都沒成功 本來準備放棄的。。。我也不懂)
過程中就輸入剛纔git用戶的密碼
從遠程倉庫克隆
url和剛纔的相同
之後會讓你輸入git用戶的密碼
成功後打開復制的倉庫
分支
在我們每次的提交,Git都把它們串成一條時間線,這條時間線就是一個分支。截止到目前,只有一條時間線,在Git裏,這個分支叫主分支,即master分支。HEAD指針嚴格來說不是指向提交,而是指向master,master纔是指向提交的,所以HEAD指向的就是當前分支。
比如說鋼鐵俠MK1就是master,MK6就是MK1的一個分支,MK7也是MK1的一個分支,MK6和MK7就是MK1的兩個分支,它們之間的開發是不會互相影響的,類似於二叉樹。分支也是可以合併的,例如MK6和MK7合體爲MK50,就是master。
創建分支
在repo1倉庫右鍵創建一個分支
起名爲branch
分支的合併與衝突解決
在當前(master)分支創建一個master.txt,添加到暫存區並提交到本地倉庫
然後修改update的內容,並提交到master分支
現在切換到branch分支
可以發現branch分支是沒有master.txt文件的,update也沒有被修改,創建branch.txt,並修改update的內容然後提交
切換回master分支,進行合併
合併分支選branch
多出了branch分支創建的文件
打開update 移除這3句話
解決衝突
提交到master
成功
在IDEA操作git
配置git
創建一個新項目 gitTest
在settings裏搜索git配置路徑 可以用test嘗試,配置後選擇OK
在src創建一個類,隨便寫點什麼
創建本地倉庫
在VCS裏創建本地倉庫
選擇當前項目的父目錄IdeaProjects,選擇ok
之後查看該目錄,會發現多出了.git目錄
添加到暫存區
回到idea右鍵項目add到暫存區
提交到倉庫
點擊IDEA右上角的綠色對勾提交
選擇src和.imi的配置文件,然後添加註釋,提交
之後再添加的代碼會被綠色標註
推送到遠程倉庫
從VCS->git->push
點擊define remote,複製githunb的遠程倉庫的url
點擊push,會要求輸入GitHub的賬戶和密碼
這裏我push失敗了,貌似是因爲版本不一致原因,我重新創建一個倉庫
按照之前得步驟push到這個倉庫,成功了~
刷新一下 發現遠程倉庫也更新了
從遠程倉庫克隆
將githunb的倉庫https地址複製到url
一路選yes和next,clone成功
添加一行代碼,提交,推送
打開github 已更新
從遠程倉庫拉取
打開一開始的舊代碼
點擊拉取
拉取成功
使用分支
創建
創建一個分支叫dev
此時當前分支是dev,哪個分支上有標籤,哪個就是當前分支
增加一個方法
提交
點擊checkout回到master
此時不再有dev方法