目錄
1、搭建遠(yuǎn)程倉(cāng)庫(kù)
1.1 github 創(chuàng)建 Repository
2、獲取遠(yuǎn)程倉(cāng)庫(kù)
2.1 克隆現(xiàn)有的倉(cāng)庫(kù)
2.2 在現(xiàn)有目錄中初始化倉(cāng)庫(kù)
3、更新提加到倉(cāng)庫(kù)
3.1 記錄每次更新到倉(cāng)庫(kù)
3.2 檢查當(dāng)前文件狀態(tài)
3.3 跟蹤新文件
3.3.1 查看跟蹤的文件
3.4 暫存已修改文件
3.5 狀態(tài)簡(jiǎn)覽
3.6 忽略文件
3.7 查看已暫存和未暫存的修改
3.8 提交更新
3.9 跳過(guò)使用暫存區(qū)域
3.10 移除文件
3.11 移動(dòng)文件
1、搭建遠(yuǎn)程倉(cāng)庫(kù)
1.1 github 創(chuàng)建 Repository
在?github.com?中通過(guò)?New repository
?創(chuàng)建倉(cāng)庫(kù)?git-demo
,只輸入了倉(cāng)庫(kù)名稱,其他均為默認(rèn)值,未進(jìn)行設(shè)置。
2、獲取遠(yuǎn)程倉(cāng)庫(kù)
????有兩種取得 Git 項(xiàng)目倉(cāng)庫(kù)的方法。
-
從一個(gè)服務(wù)器克隆一個(gè)現(xiàn)有的 Git 倉(cāng)庫(kù);
-
在現(xiàn)有項(xiàng)目或目錄下導(dǎo)入所有文件到 Git 中。
2.1 克隆現(xiàn)有的倉(cāng)庫(kù)
????如果想獲得一份已經(jīng)存在了的 Git 倉(cāng)庫(kù)的拷貝,就需要用到命令 git clone
而非 git checkout
,這是區(qū)別于其他版本控制系統(tǒng)的一個(gè)重要特性,Git 克隆的是該倉(cāng)庫(kù)服務(wù)器上的幾乎所有數(shù)據(jù),而不是僅僅復(fù)制完成你的工作所需文件,默認(rèn)配置下遠(yuǎn)程 Git 倉(cāng)庫(kù)中的每一個(gè)文件的每一個(gè)版本都將被拉取下來(lái)。
git clone https://github.com/**/git-demo1024.git
遠(yuǎn)程克隆時(shí),自定義本地倉(cāng)庫(kù)名字 【 git-demo 】:
git clone https://github.com/**/git-demo1024.git git_pratice1024
// 指定拉取 branch 分支下的代碼
$ git clone -b branch git@github.com:**/git-demo0823.git
2.2 在現(xiàn)有目錄中初始化倉(cāng)庫(kù)
????如果不克隆現(xiàn)有的倉(cāng)庫(kù),而是打算使用 Git 來(lái)對(duì)現(xiàn)有的項(xiàng)目進(jìn)行管理。
git init
該命令將創(chuàng)建一個(gè)名為
.git
的子目錄,該目錄還有初始化的 Git 倉(cāng)庫(kù)中所有的必須文件,這些是倉(cāng)庫(kù)的骨干,但僅僅是初始化,項(xiàng)目里的文件還沒有被跟蹤。
????如果是在一個(gè)已經(jīng)存在文件的文件夾(非空文件夾)中初始化 Git 倉(cāng)庫(kù)來(lái)進(jìn)行版本控制的話,應(yīng)該開始跟蹤這些文件并提交。
????通過(guò)?git add
?實(shí)現(xiàn)對(duì)指定文件的跟蹤,然后?git commit
?提交,假設(shè)在目錄?E:\MarkText\.git
?中有文件需要跟蹤(版本控制),這樣即得到了一個(gè)實(shí)際維護(hù)(跟蹤)著若干個(gè)文件的 Git 倉(cāng)庫(kù)。
git add C、C++/C/C\ 標(biāo)準(zhǔn)庫(kù).md
git commit -m 'initial markdown version'
3、更新提加到倉(cāng)庫(kù)
3.1 記錄每次更新到倉(cāng)庫(kù)
????建立好了現(xiàn)有的 Git 倉(cāng)庫(kù)(git-demo1024.git),并從這個(gè)倉(cāng)庫(kù)中取出了所有文件的工作拷貝。 接下來(lái),對(duì)這些文件做些修改,在完成了一個(gè)階段的目標(biāo)之后,提交本次更新到倉(cāng)庫(kù)。
????工作目錄下的每一個(gè)文件都不外乎這兩種狀態(tài):已跟蹤或未跟蹤。
已跟蹤的文件:被納入了版本控制的文件,在上一次快照中有它們的記錄,在工作一段時(shí)間后,它們的狀態(tài)可能處于未修改,已修改或已放入暫存區(qū)。
初次克隆某個(gè)倉(cāng)庫(kù)的時(shí)候,工作目錄中的所有文件都屬于已跟蹤文件,并處于未修改狀態(tài)
未跟蹤文件:既不存在于上次快照的記錄中,也沒有放入暫存區(qū)。
????編輯過(guò)某些文件之后,由于自上次提交后對(duì)它們做了修改,Git 將它們標(biāo)記為已修改文件。我們逐步將這些修改過(guò)的文件放入暫存區(qū),然后提交所有暫存了的修改,如此反復(fù)。
????生命周期如下:
3.2 檢查當(dāng)前文件狀態(tài)
用?git status
?命令查看哪些文件處于什么狀態(tài):
// 獲取文件狀態(tài)
git status
????說(shuō)明所有已跟蹤文件在上次提交后未被更改過(guò)。此時(shí),還表明了當(dāng)前目錄下沒有出現(xiàn)任何處于未跟蹤狀態(tài)的新文件,同時(shí)顯示,當(dāng)前所在分支同遠(yuǎn)程服務(wù)器上對(duì)應(yīng)的分支沒有偏離,默認(rèn)分支名 master
。
????在項(xiàng)目下創(chuàng)建一個(gè)新的?mytext.txt
?文件。 如果之前并不存在這個(gè)文件,使用?git status
?命令,將看到一個(gè)新的未跟蹤文件:
// 編寫并寫入
echo 'my first Git control file' > mytext.txt
git status
在之前的快照(提交)中沒有這些文件:Git 不會(huì)自動(dòng)將之納入跟蹤范圍。
3.3 跟蹤新文件
使用命令?git add
?開始跟蹤一個(gè)文件,
再運(yùn)行?git status
?命令,會(huì)看到?mytext.txt
?文件已被跟蹤,并處于暫存狀態(tài):
// 跟蹤文件
git add mytext.txt
git status
顯示在 Changes to be committed 下面的文件,就說(shuō)明是已暫存狀態(tài)。
3.3.1 查看跟蹤的文件
$ git ls-tree -r master --name-only
3.4 暫存已修改文件
- 修改一個(gè)已被跟蹤的文件,打開文件
mytext.txt
,命名為?remind.md
并編輯其中的內(nèi)容,然后運(yùn)行?git status
?命令:
顯示在?Changes not staged for commit?這行下面,說(shuō)明已跟蹤文件的內(nèi)容發(fā)生了變化,但還沒有放到暫存區(qū)。要暫存這次更新,需要運(yùn)行?
git add
?命令。
git add
是個(gè)多功能命令【添加內(nèi)容到下一次提交中】:
-
可以用它開始跟蹤新文件;
-
把已跟蹤的文件放到暫存區(qū);
-
合并時(shí)把有沖突的文件標(biāo)記為已解決狀態(tài)等。
???2. 運(yùn)行 git add
將“remind.md
”放到暫存區(qū),然后再看看?git status
?的輸出:
git add remind.md
git status
???3. 現(xiàn)在兩個(gè)文件都已暫存,下次提交時(shí)就會(huì)一并記錄到倉(cāng)庫(kù)。此時(shí)我們?cè)龠M(jìn)行編輯文件內(nèi)容并檢查狀態(tài):
????現(xiàn)在?remind.md
?同時(shí)出現(xiàn)在暫存區(qū)和非暫存區(qū)。實(shí)際上 Git 只是暫存了運(yùn)行?git add
?時(shí)的版本, 如果現(xiàn)在提交,remind.md
?的版本是最后一次運(yùn)行?git add
?命令時(shí)的那個(gè)版本,而不是運(yùn)行?git commit
?時(shí),在工作目錄中的當(dāng)前版本。
當(dāng)運(yùn)行
git add
過(guò)后又作了文件修訂,需要重新git add
暫存最新版本。
3.5 狀態(tài)簡(jiǎn)覽
git status
?輸出十分詳細(xì),但有些繁瑣。 使用?git status -s
?或?git status --short
?命令,將得到一種更為緊湊的格式輸出。 運(yùn)行?git status -s
,狀態(tài)報(bào)告輸出如下:
$ git status -s
M README.md
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
AD mytext.txt
?? LICENSE.txt
標(biāo)記:
-
?? : 新添加的未跟蹤文件;
-
A : 新添加到暫存區(qū)中的文件;
-
M : 修改過(guò)的文件;
-
D : 刪除過(guò)的文件;
-
MM :在右邊的 M 表示該文件被修改了但是還沒放入暫存區(qū),在靠左邊的 M 表示該文件被修改了并放入了暫存區(qū)。
3.6 忽略文件
????一般總會(huì)有些文件無(wú)需納入 Git 的管理,也不希望它們總出現(xiàn)在未跟蹤文件列表。通常都是些自動(dòng)生成的文件,比如日志文件,或者編譯過(guò)程中創(chuàng)建的臨時(shí)文件等。
在這種情況下,我們可以創(chuàng)建一個(gè)名為?.gitignore
?的文件,列出要忽略的文件模式:
$ cat .gitignore
*.[oa]
*~
-
忽略
.o
或者.a
結(jié)尾的文件(編譯過(guò)程中出現(xiàn)的類對(duì)象文件和存檔文件); -
忽略以
~
波浪符結(jié)尾的文件(副本文件); -
可能還需要忽略
log
、tmp
或者pid
目錄,以及自動(dòng)生成的文檔等等;
文件
.gitignore
規(guī)范如下:
所有空行或者以
#
開頭的行會(huì)被 Git 忽略;可以使用標(biāo)準(zhǔn)的
glob
模式匹配;匹配模式可以以
/
開頭防止遞歸;匹配模式可以以
/
結(jié)尾指定目錄;要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(hào)
!
取反。
glob 模式:shell 模式所使用的簡(jiǎn)化了的正則表達(dá)式;
-
*
:匹配零個(gè)或多個(gè)字符; -
[]
:匹配任何一個(gè)列在方括號(hào)中的字符; -
?
:匹配一個(gè)任意字符; -
[ - ]
:所有在這兩個(gè)字符范圍內(nèi)的都可以匹配;( [a-z] ) -
**
:匹配任意中間目錄
3.7 查看已暫存和未暫存的修改
????當(dāng)前做的哪些更新還沒有暫存? 有哪些更新已經(jīng)暫存起來(lái)準(zhǔn)備好了下次提交?
盡管?git status
?已經(jīng)通過(guò)在相應(yīng)欄下列出文件名的方式回答了這個(gè)問題,git diff
?將通過(guò)文件補(bǔ)丁的格式顯示具體哪些行發(fā)生了改變。
????修改文件后,先不暫存,運(yùn)行 git status
:
????要查看尚未暫存的文件更新了哪些部分,不加參數(shù)輸入?git diff
:
git diff
?本身只顯示尚未暫存的改動(dòng),而不是自上次提交以來(lái)所做的所有改動(dòng)。綠色 + 號(hào):表示添加;
紅色 - 號(hào):表示刪除。
用?git diff --cached
?查看已經(jīng)暫存起來(lái)的變化:(--staged
?)
通過(guò)圖形化的方式或其它格式輸出方式的話,可以使用?
git difftool
?命令來(lái)用?Araxis
?,emerge
?或?vimdiff
?等軟件輸出?diff
?分析結(jié)果。使用?
git difftool --tool-help
?命令來(lái)看你的系統(tǒng)支持哪些?Git Diff
?插件。
3.8 提交更新
????準(zhǔn)備提交前,先用?git status
?看下,是不是都已暫存起來(lái)了,如果沒有暫存起來(lái)則要先使用命令:git add .
將所有文件暫存起來(lái), 然后再運(yùn)行提交命令?git commit
:
$ git status
$ git add .
$ git commit
這種方式會(huì)啟動(dòng)文本編輯器以便輸入本次提交的說(shuō)明。
默認(rèn)會(huì)啟用 shell 的環(huán)境變量?
$EDITOR
?所指定的軟件,一般都是?vim
?或?emacs
。使用?
git config --global core.editor
?命令設(shè)定自定義編輯軟件。
可以在?commit
?命令后添加?-m
?選項(xiàng),將提交信息與命令放在同一行,如下所示:
$ git commit -m "1025 10:15 commit info"
[main (root-commit) 57cc4a2] 1025 10:15 commit info
2 files changed, 2 insertions(+)
create mode 100644 mytext.txt
create mode 100644 remind.md
????提交后會(huì)顯示,當(dāng)前是在哪個(gè)分支(main
)提交的,本次提交的完整 SHA-1 校驗(yàn)和是什么(57cc4a2
),以及在本次提交中,有多少文件修訂過(guò),多少行添加和刪改過(guò)。
提交時(shí)記錄的是放在暫存區(qū)域的快照。
任何還未暫存的仍然保持已修改狀態(tài),可以在下次提交時(shí)納入版本管理。
每一次運(yùn)行提交操作,都是對(duì)你項(xiàng)目作一次快照,之后可回到這個(gè)狀態(tài),或者進(jìn)行比較。
3.9 跳過(guò)使用暫存區(qū)域
????在提交的時(shí)候,給?git commit
?加上?-a
?,Git 就會(huì)自動(dòng)把所有已經(jīng)跟蹤過(guò)的文件暫存起來(lái)一并提交,從而跳過(guò)?git add
?步驟:
$ git commit -a -m 'skip command submission 1025 10:30'
3.10 移除文件
????從 Git 中移除文件,就必須要從已跟蹤文件清單中移除(準(zhǔn)確來(lái)說(shuō)是在暫存區(qū)中),然后 commit 。通過(guò) git rm
連同從工作目錄中刪除文件,之后也不會(huì)重新出現(xiàn)在未跟蹤文件清單里了。
- 手工移除文件時(shí),git status 時(shí)會(huì)顯示:
Changes not staged for commit // 未暫存清單
????下次 commit 則該文件就不會(huì)再納入版本管理了。
-
移除文件之前,若修改過(guò)且也已經(jīng)放到暫存區(qū)了,則必須使用強(qiáng)制移除選項(xiàng)
-f
(force),這是一種安全特性,用于防止誤刪還沒有添加到快照的數(shù)據(jù),這樣的數(shù)據(jù)不能被 git 恢復(fù)。 -
從暫存區(qū)移除文件時(shí),(忘記添加
.gitignore
文件)若希望保留在當(dāng)前工作目錄,即文件保留在磁盤,且不想讓 Git 繼續(xù)跟蹤,使用--cached
選項(xiàng):
# 僅僅刪除暫存區(qū)的文件
$ git rm --cached mytext.txt
# 刪除工作區(qū)和暫存區(qū)中的文件
$ git rm -r mytext.txt
git rm
后面可以列出文件或指定目錄,也可以使用 glob 模式:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-457359.html# 文件模式擴(kuò)展匹配方式,刪除所有 .log 文件 $ git rm log/\*.log # 移除 ~ 結(jié)尾的文件 $ git rm \*~
3.11 移動(dòng)文件
????不比其他的 VCS 系統(tǒng),Git 并不顯示跟蹤文件的移動(dòng)操作,如果在 Git 中重命名了某個(gè)文件,倉(cāng)庫(kù)中存儲(chǔ)的元數(shù)據(jù)并不體現(xiàn)這是一次重命名操作。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-457359.html
- 文件重命名:
$ git mv file_from file_from2
# 相當(dāng)于運(yùn)行以下命令:
$ mv README.md README
$ git rm README.md
$ git add README
到了這里,關(guān)于Git(四):遠(yuǎn)程倉(cāng)庫(kù)的搭建、獲取與更新的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!