歸納整理Git版本控制學習指南
這篇文章為大家帶來了關於Git的相關知識,其中主要總結了版本控制的知識點,下面我們就一起來看一下Git版本控制的學習指南,希望對大家有幫助。
推薦學習:《Git學習教學》
版本控制的起源
- 現在的軟體專案通常是由一個研發小組共同分析、設計、編碼、維護以及測試的
- 針對團隊開發需要解決以下問題:
- 備份多個版本,費空間,費時間
- 難於恢復至先前正確版本
- 難以解決程式碼衝突困難
- #難於追溯問題程式碼的修改人和修改時間
- 無法進行權限控制
- 專案版本發布困難
- 原始碼管理工具就是為了解決上述問題應運而生的
版本控制(Revision Control )
- 是維護工程藍圖的標準做法,能追蹤工程藍圖從誕生一直到定案的過程。是一種記錄若干文件內容變化,以便將來查閱特定版本修訂情況的系統
- 如果是團隊開發,使用版本控制是強制性的!
- 如果是單人開發,也強烈建議現在就開始使用版本控制!
- #使用版本控制可以:
- 不會對現有工作造成任何損害
- 不會增加工作量
- 新增新的功能拓展時,會變得更加容易
常見版本控制工具
- CVS 開啟版本控制之門
- CVS 1990年誕生,古代的主流原始碼管理工具
- #SVN 集中式版本控制之王者
- SVN:又稱subversion,是CVS的接班人,是一款
集中式
原始碼管理工具。曾經是絕大多數開源軟體的程式碼管理工具(google code),前幾年在國內軟體企業使用最為普遍
- SVN:又稱subversion,是CVS的接班人,是一款
- GIT 分散式版本控制之偉大作品
- GIT:一款
分散式
原始碼管理工具,目前國內企業幾乎都已經完成了從SVN到GIT的轉換
- GIT:一款
集中式原始碼管理
分散式原始碼管理
-
#分散式和集中式的最大差異在於:
- 在集中式下, 開發者只能將程式碼提交到伺服器, 在分散式下, 開發者可以本地提交
- 在集中式下, 只有遠端伺服器上有程式碼資料庫, 在分散式下, 每個開發者機器上都有一個程式碼資料庫
- ##SVN(集中式)
- GIT(分散式)
#
Git和SVN 的簡單比較
- 速度
- 在許多情況下,git的速度遠遠比SVN快
- 結構
- SVN是集中式管理,git是分散式管理
- 其他
- SVN使用分支比較笨拙,git可以輕鬆擁有無限個分支
- SVN必須聯網才能正常工作,git支援本地版本控制工作
- 舊版本的SVN會在每一個目錄放置一個.svn,git只會在根目錄擁有一個.git
GIT簡介
- GIT是一款自由與開源的
分散式
版本控制系統,用於敏捷高效
地處理任何或小或大的專案 - 在世界上所有的分散式版本控制工具中,git是最快、最簡單、最受歡迎的
- 是Linux之父李納斯的第二個偉大作品
- 2005年由於BitKeeper軟體公司對Linux社群停止了免費使用權。
- Linus為了輔助Linux核心的開發(管理原始碼),迫不得己自己開發了一個分散式版本控制工具,從而Git誕生了
GIT工作原理
- 如果想學好GIT必須先了解GIT的工作原理
- ##工作區(Working Directory): 倉庫資料夾裡面, 除了.git目錄
以外的內容
- 版本庫(Repository):.git目錄, 用於儲存記錄版本資訊
- 版本庫中的
- 暫緩區(staga): 版本庫中的
- 分支(master): git自動建立的第一個分支 版本庫中的**HEAD指標:**用於指向目前分支
- #git add和git commit命名作用
- ##git add: 把檔案修改加到暫緩區
-
git commit: 把暫緩區的所有內容提交到目前HEAD指標所指向的分支
多人開發時需要一個
- 共享版本庫
- , 單人開發初始化一個
本地庫
即可共享版本庫的形式:
- 本地共享庫: 資料夾/U盤/硬碟
- 遠端共享庫:自己搭建git伺服器/託管到第三方平台(github/oschina等)
- #git help
:git指令幫助手冊
-
-
- ##查看其他指令的做法:git help 其他指令
-
#git init
: 倉庫初始化(個人倉庫) -
倉庫檔案目錄
-
HEAD: 指向当前分支的一个提交 description: 项目的描述信息 config: 项目的配置信息 info/: 里面有一个exclude文件,指定本项目要忽略的文件 objects/: Git对象库(commit/tree/blob/tag) refs/: 标识每个分支指向哪个提交 hooks/: 默认的hook脚本
登入後複製GIT設定設定資訊
- ##查看其他指令的做法:git help 其他指令
- 設定使用者名稱:
git config user.name "使用者名稱"
設定信箱:(用於追蹤修改記錄)
- git config user.email "郵件信箱"
- (用於多人開發間的溝通)
- : 檢視設定資訊
##git config -e
: 編輯設定資訊
- (用於多人開發間的溝通)
-
##git status
:查檔案的狀態- 檢視某個檔案的狀態:
git status 檔案名稱
- 檢視目前路徑所有檔案的狀態:
git status
- 檢視某個檔案的狀態:
-
git add
:將工作區的檔案儲存到暫緩區- 儲存某個檔案到暫緩區:
git add 檔案名稱
- 儲存目前路徑的所有檔案到暫緩區:
git add .
(注意,最後是一個點. )
- 儲存某個檔案到暫緩區:
-
git commit
:將暫緩區的檔案提交到目前分支- 提交某個檔案到分支:
git commit -m 」註解」 檔案名稱
- 儲存目前路徑的所有檔案到分支:
git commit -m 」註解”
- git log
:檢視檔案的修改日誌
git log 檔案名稱 - 提交某個檔案到分支:
-
查看目前路徑所有檔案的修改日誌:
git log- 用一行的方式查看簡單的日誌資訊:
git log ––pretty=oneline
- 查看最近的N次修改:
git log –N
(N是整數)
- 用一行的方式查看簡單的日誌資訊:
git diff
:查看文件最新改動的地方- 查看某個文件的最新改動的地方:
git diff 檔名
git diff##看目前路徑所有文件最新改動的地方:
-
####git reflog### :查看分支引用記錄(能夠查看所有的版本號碼)# ##############git rm###:刪除檔案(刪除之後要進行commit操作,才能同步到版本庫)############# ##git reset###:版本回退(建議加上––hard參數,git支援無限次後悔)###- 回退到上一个版本:
git reset ––hard HEAD^
- 回退到上上一个版本:
git reset ––hard HEAD^^
- 回退到上N个版本:
git reset ––hard HEAD~N(N是一个整数)
- 回退到任意一个版本:
git reset ––hard 版本号(版本号用7位即可)
- 回退到上一个版本:
-
Git忽略提交规则 - .gitignore配置
- 别看了, 你想要的都在这企业开发专用链接
# 表示此为注释,将被Git忽略*.a 表示忽略所有 .a 结尾的文件!lib.a 表示但lib.a除外/TODO 表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ 表示忽略 build/目录下的所有文件,过滤整个build文件夹; doc/*.txt 表示会忽略doc/notes.txt但不包括 doc/server/arch.txt bin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件 /bin: 表示忽略根目录下的bin文件 /*.c: 表示忽略cat.c,不忽略 build/cat.c debug/*.obj: 表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj **/foo: 表示忽略/foo,a/foo,a/b/foo等 a/**/b: 表示忽略a/b, a/x/b,a/x/y/b等!/bin/run.sh 表示不忽略bin目录下的run.sh文件*.log: 表示忽略所有 .log 文件 config.php: 表示忽略当前路径的 config.php 文件 /mtk/ 表示过滤整个文件夹*.zip 表示过滤所有.zip文件/mtk/do.c 表示过滤某个具体文件 被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。 需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:!*.zip!/mtk/one.txt 唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。为什么要有两种规则呢? 想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么.gitignore规则应写为::/mtk/* !/mtk/one.txt 假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来! 注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,one.txt文件虽然加了!过滤规则,也不会生效! ---------------------------------------------------------------------------------- 还有一些规则如下: fd1/* 说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略; /fd1/* 说明:忽略根目录下的 /fd1/ 目录的全部内容; /* !.gitignore !/fw/ /fw/* !/fw/bin/ !/fw/sf/ 说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;注意要先对bin/的父目录使用!规则,使其不被排除。
GIT命令-团队开发
-
git init --bare
: 仓库初始化(共享仓库)- 注意: 不要直接在共享仓库中编写代码
-
git clone
:下载远程仓库到本地- 下载远程仓库到当前路径:git clone 仓库的URL
- 下载远程仓库到特定路径:git clone 仓库的URL 存放仓库的路径
-
git pull
:下载远程仓库的最新信息到本地仓库 -
git push
:将本地的仓库信息推送到远程仓库- 提交时如果远程仓库有其它人提交的最新代码, 必须先pull, 再提交
- 冲突解决:
- 当多个人同时修改了同一个文件时, 后提交的需要先从服务器pull代码到问题, 手动解决完冲突之后再push到远程服务器
<<<<<<< HEAD 你本地的新增的代码======= 服务器上和你冲突的代码>>>>>>> e9609de28b65bf97539f94c6458cdebdf2711c9f
GIT经典协同模型
中心仓库:包含master和develop两个分支
-
分支分类
- 主要分支:master和develop分支
- 支持性分支:特性分支,发布分支,热补丁分支
对于商业级项目,真正开发过程中都是基于develop分支进行的,develop分支是开发主线!
master分支中,只存放相对稳定的分支,例如:0.1版本, 0.2版本
在实际产品开发中,需要“规划版本”,例如:将100个功能规划到5个不同的版本上
发现bug,要基于“上一个最稳定的版本”进行修复,这是热补丁分支存在的意义!
理解清楚版本管理分支的特性,是迭代式开发的重要基础!
git branch
: 查看所有分支git branch 分支名称
: 创建分支
- 新创建的分支中的内容和master分支中的内容一样
-
git checkout 分支名称
: 切换到指定分支 -
git merge 分支名称
: 合并分支- 将当前所在分支和指定名称分支进行合并
-
git branch -d 分支名称
: 删除指定分支
- 不能在当前分支中删除自己
使用GIT我们应该
- 经常更新:降低冲突的可能性
- 提交前需在本机测试通过:降低将问题代码传到版本库
- 提交时一定写备注:方便其他员工查看和自己以后回顾
- 对于不需要提交的文件不要提交到版本库
提示:
- 每次提交前先更新
- 每天下班前提交當天編譯通過的程式碼
- #每天上班第一件事情更新前一天的程式碼
#GITHUB使用
- 1.註冊GitHub帳號
- 6.設定SSH Key
- 6.1開啟git 命令列工具
- 輸入指令
- ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- ssh -T git@github.com
#7.利用SSH Key操作GitHub
oschina使用
- 和GitHub 方法相同
以上是歸納整理Git版本控制學習指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

更新 git 代碼的步驟:檢出代碼:git clone https://github.com/username/repo.git獲取最新更改:git fetch合併更改:git merge origin/master推送更改(可選):git push origin master

要通過 Git 下載項目到本地,請按以下步驟操作:安裝 Git。導航到項目目錄。使用以下命令克隆遠程存儲庫:git clone https://github.com/username/repository-name.git

Git Commit 是一種命令,將文件變更記錄到 Git 存儲庫中,以保存項目當前狀態的快照。使用方法如下:添加變更到暫存區域編寫簡潔且信息豐富的提交消息保存並退出提交消息以完成提交可選:為提交添加簽名使用 git log 查看提交內容

解決 Git 下載速度慢時可採取以下步驟:檢查網絡連接,嘗試切換連接方式。優化 Git 配置:增加 POST 緩衝區大小(git config --global http.postBuffer 524288000)、降低低速限制(git config --global http.lowSpeedLimit 1000)。使用 Git 代理(如 git-proxy 或 git-lfs-proxy)。嘗試使用不同的 Git 客戶端(如 Sourcetree 或 Github Desktop)。檢查防火

Git 代碼合併過程:拉取最新更改以避免衝突。切換到要合併的分支。發起合併,指定要合併的分支。解決合併衝突(如有)。暫存和提交合併,提供提交消息。

如何更新本地 Git 代碼?用 git fetch 從遠程倉庫拉取最新更改。用 git merge origin/<遠程分支名稱> 將遠程變更合併到本地分支。解決因合併產生的衝突。用 git commit -m "Merge branch <遠程分支名稱>" 提交合併更改,應用更新。

在開發一個電商網站時,我遇到了一個棘手的問題:如何在大量商品數據中實現高效的搜索功能?傳統的數據庫搜索效率低下,用戶體驗不佳。經過一番研究,我發現了Typesense這個搜索引擎,並通過其官方PHP客戶端typesense/typesense-php解決了這個問題,大大提升了搜索性能。

要刪除 Git 倉庫,請執行以下步驟:確認要刪除的倉庫。本地刪除倉庫:使用 rm -rf 命令刪除其文件夾。遠程刪除倉庫:導航到倉庫設置,找到“刪除倉庫”選項,確認操作。
