GIT安装部署
git
git簡介
Git不僅是一款開源的分布式版本控制系統(tǒng),而且有其獨(dú)特的功能特性,例如大多數(shù)的分布式版本控制系統(tǒng)只會記錄每次文件的變化,說白了就是只會關(guān)心文件的內(nèi)容變化差異,而Git則是關(guān)注于文件數(shù)據(jù)整體的變化,直接會將文件提交時的數(shù)據(jù)保存成快照,而非僅記錄差異內(nèi)容,并且使用SHA-1加密算法保證數(shù)據(jù)的完整性。
Git為了提高效率,對于沒有被修改的文件,則不會重復(fù)存儲,而是創(chuàng)建一個鏈接指向之前存儲過的文件。
在正式使用前,我們還需要弄清楚Git的三種重要模式,分別是已提交、已修改、已暫存
已提交(committed):表示數(shù)據(jù)文件已經(jīng)順利提交到Git數(shù)據(jù)庫中。
已修改(modified):表示數(shù)據(jù)文件已經(jīng)被修改,但未被保存到Git數(shù)據(jù)庫中。
已暫存(staged):表示數(shù)據(jù)文件已經(jīng)被修改,并會在下次提交時提交到Git數(shù)據(jù)庫中。
?
?
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
Git是分布式的版本控制系統(tǒng),我們只要有了一個原始Git版本倉庫,就可以讓其他主機(jī)克隆走這個原始版本倉庫,從而使得一個Git版本倉庫可以被同時分布到不同的主機(jī)之上,并且每臺主機(jī)的版本庫都是一樣的,沒有主次之分,極大的保證了數(shù)據(jù)安全性,并使得用戶能夠自主選擇向那個Git服務(wù)器推送文件了,其實(shí)部署一個git服務(wù)器是非常簡單的。
安裝git
?
配置git用戶
git config --global user.name "yangyang"?
配置用戶郵箱
git config --global user.email "yangyang@mail.com"?
帶顏色
git config --global color.ui true?
?
Git常用命令
add #添加文件內(nèi)容至索引bisect #通過二分查找定位引入 bug 的變更branch #列出、創(chuàng)建或刪除分支checkout #檢出一個分支或路徑到工作區(qū)clone #克隆一個版本庫到一個新目錄commit #記錄變更到版本庫diff #顯示提交之間、提交和工作區(qū)之間等的差異fetch #從另外一個版本庫下載對象和引用grep #輸出和模式匹配的行init #創(chuàng)建一個空的 Git 版本庫或重新初始化一個已存在的版本庫log #顯示提交日志merge #合并兩個或更多開發(fā)歷史mv #移動或重命名一個文件、目錄或符號鏈接pull #獲取并合并另外的版本庫或一個本地分支push #更新遠(yuǎn)程引用和相關(guān)的對象rebase #本地提交轉(zhuǎn)移至更新后的上游分支中reset #重置當(dāng)前HEAD到指定狀態(tài)rm #從工作區(qū)和索引中刪除文件show #顯示各種類型的對象status #顯示工作區(qū)狀態(tài)tag #創(chuàng)建、列出、刪除或校驗一個GPG簽名的 tag 對象?
?
提交數(shù)據(jù)
mkdir yangyang?
創(chuàng)建一個工作目錄
cd yangyang?
初始化git工作目錄
git init?
初始化空的 Git 版本庫于
/root/yangyang/.git/?
創(chuàng)建文件
touch readme創(chuàng)建文件
git add readme.txt添加文件到暫存區(qū)
查看狀態(tài) git status # 位于分支 master # # 初始提交 # # 要提交的變更: # (使用 "git rm --cached <file>..." 撤出暫存區(qū)) # # 新文件: readme.txt # # 未跟蹤的文件:?
?
提交到倉庫
git commit -m "the fisst commit"[master(根提交) 4367d80] the fisst commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 readme.txt
?
git移除數(shù)據(jù)
創(chuàng)建文件
touch database?
添加到文件到暫存區(qū)
git add database?
查看狀態(tài)
git status# 位于分支 master # 要提交的變更: # (使用 "git reset HEAD <file>..." 撤出暫存區(qū)) # # 新文件: database #
?
?
移除暫存區(qū)文件(并不會刪除文件)
git rm --cached database rm 'database'?
###強(qiáng)制刪除文件和git緩存區(qū)
?
?
git移動數(shù)據(jù)
重命名
git mv readme.txt test.txt git status# 位于分支 master # 要提交的變更: # (使用 "git reset HEAD <file>..." 撤出暫存區(qū)) # # 重命名: readme.txt -> test.txt?
?
在提交到倉庫
git commit -m "changed name"[master 8a8b23d] changed name 1 file changed, 0 insertions(+), 0 deletions(-) rename readme.txt => test.txt (100%)?
?
git歷史記錄
查看最近幾條記錄
git log -2顯示每次提交的內(nèi)容差異
git log -p -1?
#–pretty根據(jù)不同的格式展示提交的歷史信息
git log –pretty=oneline?
#以更詳細(xì)的模式輸出提交的歷史記錄
git log –pretty=fuller -2?
還可以使用format參數(shù)來指定具體的輸出格式,這樣非常便于后期編程的提取分析哦,常用的格式有:
%s 提交說明。%cd 提交日期。%an 作者的名字。%cn 提交者的姓名。%ce 提交者的電子郵件。%H 提交對象的完整SHA-1哈希字串。%h 提交對象的簡短SHA-1哈希字串。%T 樹對象的完整SHA-1哈希字串。%t 樹對象的簡短SHA-1哈希字串。%P 父對象的完整SHA-1哈希字串。%p 父對象的簡短SHA-1哈希字串。%ad 作者的修訂時間。?
?
git log –pretty=fomat:”%h %cn”#查看當(dāng)前所有提交記錄的簡短SHA-1哈希字串與提交著的姓名
fomat:2caa209 yangyang
fomat:88f3791 yangyang
fomat:76c486f yangyang
?
git數(shù)還原
添加一段文字
?
提交到暫存區(qū)
git add readme.txt?
提交到倉庫
git commit -m "yangyang"?
在此追加一段話到readme
echo "hellow ....">>readme.txt?
添加到暫存區(qū)
git add readme.txt?
提交
git commit -m "hello"?
覺得寫得不怎么樣,想還原某一次提交的快照
git log --pretty=onelinea7542d38edb628dd48c4118993784fec92d4fbbf hello 84d3786398cfa203ffc1c7015033457c72e5c72f yangyang
?
Git服務(wù)程序中有一個叫做HEAD的版本指針,當(dāng)用戶申請還原數(shù)據(jù)時,其實(shí)就是將HEAD指針指向到某個特定的提交版本,但是因為Git是分布式版本控制系統(tǒng),為了避免歷史記錄沖突,故使用了SHA-1計算出十六進(jìn)制的哈希字串來區(qū)分每個提交版本,另外默認(rèn)的HEAD版本指針會指向到最近的一次提交版本記錄,而上一個提交版本會叫HEAD^,上上一個版本則會叫做HEAD^^,當(dāng)然一般會用HEAD~5來表示往上數(shù)第五個提交版本。
?
還原上一次提交版本
git reset --hard HEAD^?
HEAD 現(xiàn)在位于 84d3786 yangyang
查看你的文件
?
?
#這時候又想還原的最新的版本。。。。
git log --pretty=oneline84d3786398cfa203ffc1c7015033457c72e5c72f yangyang 8a8b23d984b69fb30db6a1cec40f27ba6b873652 changed name 4367d804810b6309b925720498e7cbaa641dba93 the fisst commit?
發(fā)現(xiàn)沒有hello沒有了。。。。
使用reflog 查看歷史更新點(diǎn)
?
還原
git reset --hard a7542d3?
HEAD 現(xiàn)在位于 a7542d3 hello
cat readme.txt yangyang hellow ...?
.
?
Git管理分支結(jié)構(gòu)
分支即是平行空間,假設(shè)你在為某個手機(jī)系統(tǒng)研發(fā)拍照功能,代碼已經(jīng)完成了80%,但如果將這不完整的代碼直接提交到git倉庫中,又有可能影響到其他人的工作,此時我們便可以在該軟件的項目之上創(chuàng)建一個名叫”拍照功能”的分支,這種分支只會屬于你自己,而其他人看不到,等代碼編寫完成后再與原來的項目主分支合并下即可,這樣即能保證代碼不丟失,又不影響其他人的工作。
?
創(chuàng)建git分支
git branch linux?
切換分支
git checkou linux?
查看當(dāng)前分支情況,當(dāng)前分支前面有*號
git branch * linux master?
添加以行字符串
echo “Create new branch is linux” >> readme.txt?
提交到暫存區(qū)
git add readme.txt?
提交到git倉庫
git commit -m "new branch"?
我們提交后文件 切換回到master分支
git checkout master?
切換到分支 'master'
查看文件
?
?
git合并分支
查看現(xiàn)在在那個分支
git branch linux * master?
#合并分支
?
查看文件
cat readme.txtyangyang hellow .... create new branch is linux
?
?
刪除分支
git branch -d linux?
已刪除分支 linux(曾為 0918787)。
查看分支
git branch * master?
git管理標(biāo)簽
當(dāng)版本倉庫內(nèi)的數(shù)據(jù)有個大的改善或者功能更新,我們經(jīng)常會打一個類似于軟件版本號的標(biāo)簽,這樣通過標(biāo)簽就可以將版本庫中的某個歷史版本給記錄下來,方便我們隨時將特定歷史時期的數(shù)據(jù)取出來用,另外打標(biāo)簽其實(shí)只是像某個歷史版本做了一個指針,所以一般都是瞬間完成的。
#當(dāng)前提交內(nèi)容打個標(biāo)簽(方便快速回滾)
git tag v1.0
查看當(dāng)前所有標(biāo)簽
git tag
查看當(dāng)前1.0版本詳細(xì)信息
git show v1.0
創(chuàng)建帶標(biāo)簽及說明
git tag v1.2 -m "version 1.2 release is test"
刪除之前標(biāo)簽
git tag -d v1.0
查看
git tag
v1.2
?
gitlab安裝部署
yum install curl openssh-server postfix -y
systemctl enable sshd postfix
systemctl start sshd postfix
*如果有防火墻
firewall-cmd –permanent –add-service=http
systemctl reload firewalld
?
添加gitlab包服務(wù)器安裝包
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
yum install gitlab-ce
(挺慢的,如果不行https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/)
配置并啟動
gitlab-ctl reconfigure
gitlab-ctl status
gitlab-ctl stop
gitlab-ctl start
瀏覽到主機(jī)名和登錄
root
密碼自動生成
?
GitLab配置ssh
#如果是默認(rèn)的22,就必須修改,否則不生效,我這里改為了52113
sed -i 's/#Port 22/Port 52113/g' /etc/ssh/sshd_config
systemctl restart sshd #重啟sshd服務(wù)
#修改gitlab里面的ssh_prot端口為自己服務(wù)器的sshd端口,聲明gitlab.yml中的配置會被這個給覆蓋
grep “ssh_port” /etc/gitlab/gitlab.rb #修改gitlab里面的ssh_prot端口為自己服務(wù)器的sshd端口,聲明gitlab.yml中的配置會被這個給覆蓋
gitlab_rails[‘gitlab_shell_ssh_port’] = 52113
?
gitlab重新加載配置文件即可
gitlab-ctl reconfigure
?
GitHub托管服務(wù)
?Github顧名思義是一個Git版本庫的托管服務(wù),是目前全球最大的軟件倉庫,擁有上百萬的開發(fā)者用戶,也是軟件開發(fā)和尋找資源的最佳途徑,Github不僅可以托管各種Git版本倉庫,還擁有了更美觀的Web界面,您的代碼文件可以被任何人克隆,使得開發(fā)者為開源項貢獻(xiàn)代碼變得更加容易,當(dāng)然也可以付費(fèi)購買私有庫,這樣高性價比的私有庫真的是幫助到了很多團(tuán)隊和企業(yè)。
大多數(shù)用戶都是為了尋找資源而愛上Github的,首先進(jìn)入網(wǎng)站,點(diǎn)擊注冊(Sign up):
?
?
?
?
?
?
?
我們在向Github推送文件時,可以選擇SSH協(xié)議模式,在本機(jī)生成密鑰
生成密鑰
ssh-keygen
?
?
?
查看公鑰
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDO2dis085TOtTqAFU7aUDh2siAav/6HgXuC3+yIFxAFvlKNn88GLqoqlFlnVCobgvri56nqYo1fpclVk0Z+ZoShLF0HCFfZRZVlbwXC6y6uy8BqzMzKXptUTPBw2SbL843kNVyk01kx2kop3YukSG4fWsr2CRUeNUiqe/3q4S1Hzyzd+u6W67W9ax4W0Ud2r3v1mkc0L3lIl2aVLk1G/qhvcD+K7ivo2zEozDVzAsawim+taYa6s8wM8N99ij0+WrvRLN55CscYTnX4u52Vg1U7bdGtz05KmVUW2Prb/fnsnGhJ5CJz40VNqHxpVmrsiRf7TcMdNKAX4TARqYEhkjD root@localhost.localdomain
?
?
?
?
?
?
手動克隆
?git clone https://github.com/sky00747/demo.git
上傳測試
cd demo/
git add test.txt
git commit -m "add test file"
git remote
origin
?
上傳
git push -u origin master
?
git push -u origin master Username for 'https://github.com': sky00747 Password for 'https://sky00747@github.com': Counting objects: 4, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 282 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/sky00747/demo.gitb873aeb..466e6a9 master -> master 分支 master 設(shè)置為跟蹤來自 origin 的遠(yuǎn)程分支 master。?
?
轉(zhuǎn)載于:https://www.cnblogs.com/sky00747/p/9024786.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: codeforces 540D Bad
- 下一篇: centos安装 node.js