我的文檔變成了亂碼?(文檔突然變成亂碼)
878
2025-04-02
分布式版本控制 Git
版本控制(Revision control)是一種在開發的過程中用于管理我們對文件、目錄或工程等內容的修改歷史,方便查看更改歷史記錄,備份以便恢復以前的版本的軟件工程技術。
Git是分布式版本控制系統,分布式特點:沒有中央服務器,每個人的電腦就是一個完整的版本庫。Git是免費、開源的,最初Git是為輔助 Linux 內核開發的,來替代 BitKeeper!
git優點:
實現跨區域多人協同開發
追蹤和記載一個或者多個文件的歷史記錄
組織和保護你的源代碼和文檔
統計工作量
并行開發、提高開發效率
跟蹤記錄整個軟件的開發過程
由于沒有中央服務器,每個人的電腦就是一個完整的版本庫,不會因為服務器損壞或者網絡問題,造成不能工作的情況
適合分布式開發,強調個體。
任意兩個開發者之間可以很容易的解決沖突。
git缺點:
代碼保密性差,每個人都擁有全部的代碼!
所有版本信息倉庫全部同步到本地的每個用戶,增加了本地存儲空間的占用。
模式上比SVN更加復雜。
Git=“飯桶”?
我們都知道,Linux 內核開源項目有著為數眾廣的參與者。整個項目組開始的時候啟用一個分布式版本控制系統 BitKeeper 來管理和維護代碼。本來BitKeeper 用的好好的,后來BitKeeper公司懷疑Linux社區中一些大佬在搞逆向工程,企圖破解 BitKeeper !他們就收回了給Linux開發者的免費授權,于是Linus不得不自己寫了一個分布式版本控制系統,還給它起名git。
小伙伴們可以想象有人開發一款軟件,并且給它起名“傻逼”或者“飯桶”的場景么。
Git環境配置
軟件下載
打開 [git官網] https://git-scm.com/,下載git對應操作系統的版本。
官網下載太慢,我們可以使用淘寶鏡像下載:http://npm.taobao.org/mirrors/git-for-windows/
下載對應的版本即可安裝!
Windows安裝:傻瓜式點擊下一步(更改一下安裝目錄),倘若還有問題的話,在【Hexo】筆記01:安裝Hexo-云社區-華為云 中有詳解
Liunx安裝
1、如果你碰巧用Debian或Ubuntu Linux,通過一條sudo apt-get install git就可以直接完成Git的安裝,非常簡單。
2、老一點的Debian或Ubuntu Linux,要把命令改為sudo apt-get install git-core,因為以前有個軟件也叫GIT(GNU Interactive Tools),結果Git就只能叫git-core了。由于Git名氣實在太大,后來就把GNU Interactive Tools改成gnuit,git-core正式改為git。
3、如果是其他Linux版本,可以直接通過源碼安裝。先從Git官網下載源碼,然后解壓,依次輸入:./config,make,sudo make install這幾個命令安裝就好了。
軟件卸載
打開系統屬性
打開系統設置
打開環境變量
刪除Path
刪除git環境后再進行軟件卸載
啟動Git
安裝成功后在開始菜單中會有Git項
任意文件夾下右鍵也可以看到對應的git
Git Bash:Unix與Linux風格的命令行,使用最多,推薦最多
Git CMD:Windows風格的命令行
Git GUI:圖形界面的Git,不建議初學者使用,盡量先熟悉常用命令
常用的Linux命令
1)、cd : (change directory)改變目錄。
2)、cd . . 回退到上一個目錄,直接cd進入默認目錄
3)、pwd : 顯示當前所在的目錄路徑。
4)、ls(ll): 都是列出當前目錄中的所有文件,只不過ll(兩個ll)列出的內容更為詳細。
5)、touch : 新建一個文件 如 touch index.js 就會在當前目錄下新建一個index.js文件。
6)、rm: (remove)刪除一個文件, rm index.js 就會把index.js文件刪除。
7)、mkdir: (make directory)新建一個目錄,就是新建一個文件夾。
8)、rm -r : 刪除一個文件夾, 例如:rm -r src 刪除src目錄
rm -rf / 切勿在Linux中嘗試!f遞歸 /代表根目錄,直接格式化所有文件!!
9)、mv :(move)移動文件,
mv index.html src
index.html 是我們要移動的文件, src 是目標文件夾,當然, 這樣寫,必須保證文件和目標文件夾在同一目錄下。
10)、reset 重新初始化終端/清屏。
11)、clear 清屏。
12)、history 查看命令歷史。
13)、help 幫助。
14)、exit 退出。
15)、#表示注釋
Git配置
所有的配置文件,其實都保存在本地!
查看配置 git config -l
查看不同級別的配置文件:
#查看系統config git config --system --list #查看當前用戶(global)配置 git config --global --list #查看當前倉庫配置信息 git config --local --list
Git相關的配置文件:
1)、Git\etc\gitconfig :Git 安裝目錄下的 gitconfig --system 系統級
2)、C:\Users\Administrator\ .gitconfig : 只適用于當前登錄用戶的配置 --global 全局
3)、當前文件夾\.git\config :查看當前倉庫配置信息
設置用戶名與郵箱(必須的用戶標識)
當你安裝Git后首先要做的事情是設置你的用戶名稱和e-mail地址。這是非常重要的,因為每次Git提交都會使用該信息。它被永遠的嵌入到了你的提交中:
git config --global user.name "LongYorke" #名稱
git config --global user.email xxxxxxxxxx@qq.com #郵箱
只需要做一次這個設置,如果你傳遞了--global 選項,因為Git將總是會使用該信息來處理你在系統中所做的一切操作。
如果你希望在一個特定的項目中使用不同的名稱或e-mail地址,你可以在該項目中運行該命令而不要--global選項。
總之--global為全局配置,不加為某個項目的特定配置。
Git基本理論
四個區域
Git本地有三個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠程的git倉庫(Remote Directory)就可以分為四個工作區域。文件在這四個區域之間的轉換關系如下:
Workspace:工作區,就是你平時存放項目代碼的地方
Index / Stage:暫存區,用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息。就像我們去購物一樣,先把東西放到購物車Index / Stage,去結賬沒問題后放到家里Repository
Repository:倉庫區(或本地倉庫),就是安全存放數據的位置,這里面有你提交到所有版本的數據。其中HEAD指向最新放入倉庫的版本
Remote:遠程倉庫,托管代碼的服務器,可以簡單的認為是你項目組中的一臺電腦用于遠程數據交換
git倉庫中HEAD指向本地的倉庫區內當前的開發分支,默認主分支master
文件的四種狀態
版本控制就是對文件的版本控制,要對文件進行修改、提交等操作,首先要知道文件當前在什么狀態,不然可能會提交了現在還不想提交的文件,或者要提交的文件沒提交上。
Untracked: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態變為Staged.
Unmodify: 文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變為Modified. 如果使用git rm移出版本庫, 則成為Untracked文件
Modified: 文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處, 通過git add可進入暫存staged狀態, 使用git checkout 則丟棄修改過, 返回到unmodify狀態, 這個git checkout即從庫中取出文件, 覆蓋當前修改 !
Staged: 暫存狀態. 執行git commit則將修改同步到庫中, 這時庫中的文件和本地文件又變為一致, 文件為Unmodify狀態. 執行git reset HEAD filename取消暫存, 文件狀態為Modified
下圖描述了文件狀態、三個區域(本地)、部分命令關聯部分
git status [filename] :查看指定文件狀態
git status:查看所有文件狀態
git diff:比較文件的不同,即暫存區和工作區的差異。
git log:查看歷史提交記錄
黑色:
git add .:暫存區的目錄樹被更新,同時工作區修改(或新增)的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。
git commit -m “1.0.0”:將本地修改過的文件提交到本地庫中,并有提交信息1.0.0,master 分支會做相應的更新。
git rm --cached
紅色:
git reset HEAD :暫存區index/stage的目錄樹會被respository重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。
綠色:
git checkout . 或者 git checkout --
git checkout HEAD . 或者 git checkout HEAD
如果再討論遠程倉庫:
git push:是將本地庫中的最新信息發送給遠程庫;
git pull:是從遠程獲取最新版本到本地,并自動merge;
git fetch:是從遠程獲取最新版本到本地,不會自動merge;
git merge:是用于從指定的commit(s)合并到當前分支,用來合并兩個分支;
加上分支內容:
# 列出所有本地分支和遠程分支 $ git branch -a # 新建一個分支,但依然停留在當前分支 $ git branch [branch-name] # 新建一個分支,并切換到該分支 $ git checkout -b [branch] # 新建一個分支,指向指定commit $ git branch [branch] [commit] # 新建一個分支,與指定的遠程分支建立追蹤關系 $ git branch --track [branch] [remote-branch] # 切換到指定分支,并更新工作區 $ git checkout [branch-name] # 切換到上一個分支 $ git checkout - # 建立追蹤關系,在現有分支與指定的遠程分支之間 $ git branch --set-upstream [branch] [remote-branch] # 合并指定分支到當前分支 $ git merge [branch] # 選擇一個commit,合并進當前分支 $ git cherry-pick [commit] # 刪除分支 $ git branch -d [branch-name] # 刪除遠程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]
有點暈?那么來一波總結:
1、存儲(去的感覺):
git add 工作區->暫存區
git commit -m 暫存區->本地倉庫
git commit --amend -m [message] ①如代碼無新變化,覆蓋上一次commit的提交信息
②如有變,覆蓋上一次commit
git push 本地倉庫->遠程倉庫
2、覆蓋與刪除(回的感覺):
git merge:本地倉庫內兩個部分合并
git fetch 遠程倉庫->本地倉庫
git pull 相當于 git fetch + git merge。
(有“HEAD” 的從本地倉庫開始操作)
git reset HEAD 本地倉庫的內容->暫存區 (覆蓋)
git reset --hard HEAD 本地倉庫的內容->工作區+暫存區(覆蓋)
git checkout HEAD 本地倉庫的內容->暫存區+工作區(覆蓋)
git checkout ①--<文件> 暫存區內容->工作區(覆蓋) ②<分支> 切換分支
git rm --cached 暫存區->垃圾桶
git rm [file1] [file2] 工作區->垃圾桶(同時)工作區刪除記錄->暫存區
3、最開始啥也沒有
git init
git clone 遠程倉庫->本地倉庫+暫存區+工作區
4、分支
看下面實際操作過程
工作流程
Gitee、Github 兩大代碼托管平臺,小孩子才做選擇,我們都要~
工作流程一般是這樣的:
1、使用以下命令生成 SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
ssh-keygen -t rsa -C "youremail@example.com"
打開id_rsa.pub,復制里面的key。
2、上傳自己的 SSH 公鑰。
github:
左側尋到
gitee:
3、添加倉庫信息:
github:
gitee:
4、創建倉庫
git init
5、 從現有 Git 倉庫中拷貝項目,如
git clone git://github.com/xxx/xxx.git
5、本地庫上使用命令git remote add把它和 Gitee 的遠程庫關聯:
git remote add origin git@gitee.com:longyorke/LongYorke_test.git
出現該情況說明本地庫已經關聯了一個名叫 origin 的遠程庫(做該實驗之前我已經關聯過了,如果第一次關聯是不會fatal的),此時,可以先用git remote -v查看遠程庫信息:
git remote -v
可以看到,本地庫已經關聯了 origin 的遠程庫,并且,該遠程庫指向 Gitee。
我們可以刪除已有的 Gitee 遠程庫:
git remote rm origin
重新關聯遠程庫:git 給遠程庫起的默認名稱是 origin,如果有多個遠程庫,我們需要用不同的名稱來標識不同的遠程庫。
git remote add github git@github.com:LongYorke/long-yorke_music.git
git remote add gitee git@gitee.com:LongYorke/long-yorke_music.git
此刻,遠程庫名字不再是 origin,而是我們設置的github與gitee
$ git remote -v gitee git@gitee.com:longyorke/long-yorke_music.git (fetch) gitee git@gitee.com:longyorke/long-yorke_music.git (push) github git@github.com:Longyorke/LongYorke_music.git (fetch) github git@github.com:Longyorke/LongYorke_music.git (push)
6、有了修改的變化后,瞅一下文件狀態
git status
7、將工作區的文件提交到暫存區域。
git add .
8、將暫存區域的文件提交到本地倉庫。
git commit -m '初始化項目版本'
9、如果要推送到 GitHub,使用命令:
git push github master
如果要推送到 Gitee,使用命令:
git push gitee master
10、分支管理
創建一個dev分支用于測試開發,master分支用于穩定版存儲
git branch dev
觀察分支
git branch
切換分支命令:
git checkout dev
合并分支命令:
出于dev分支時,將material合并進入dev分支
git merge master
刪除dev分支命令:
git branch -d dev
11、恢復
git中把commit刪了后,并不是真正的刪除,而是變成了懸空對象(dangling commit)。我們只要把把這懸空對象(dangling commit)找出來。
1)用git reset --hard HEAD 覆蓋后
2)找到懸空對象
git fsck --lost-found dangling commit xxx
3)用合并命令進行恢復:
git merge xxx
12、強制覆蓋遠程分支
然后用這個
git push -u 我們起的主機名字 本地分支 -f
強制覆蓋已有遠程的分支
此外還有Git 查看提交歷史、Git 標簽等內容
可以進入gitee官網了解更全面的內容
Git 倉庫基礎操作 - Gitee.com
可以進入git官網學習更全面的知識
Git - 關于版本控制
Git Linux
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。