中國企業怎樣用好OKR?(國內企業一般用什么系統)
1002
2025-04-01
介紹一下SVN
SVN:代碼控制器(版本控制器),主要是為了多人協同開發項目,管理代碼。也可以管理個人代碼。也叫程序界的”后悔藥“。
SVN(是subversion的簡稱)是近年來一款基于C/S架構的,非常優秀的版本控制器(可以簡單的理解為管理代碼的工具,在多人協同開發的時候,尤其重要),與傳統的CVS(90年代左右,一個非常優秀的代碼管理器,是代碼管理器的鼻祖)管理工具類似。
SVN可以隨著時間的推移來管理各種數據,這些數據被放置在一個SVN管理的中央倉庫(所有的代碼的集合)里面。同時SVN會備份并記錄每個文件每一次的修改更新變動。這樣就開發者就可以回歸到任何一個時間點的某一個舊的版本(對于SVN,沒修改一次文件,SVN就會創建一個叫做版本的概念,是從0?開始自增的序列)。當然也可以指定文件的更新歷史記錄(index.php)。
SVN又叫做集中式版本控制器。嚴重的依賴服務器端,當服務器端無法使用的時候,版本控制也就無法再使用了。
svn工作流程圖
了解一下GIT
Git是目前世界上最先進的分布式版本控制系統(沒有之一)。當這個系統的任何一個客戶端出現問題的時候,都可以從另外的客戶端(即使服務器掛了)獲取所有的代碼。
SVN與GIT的區別:
1.GIT是分布式的,而SVN是集中式的
2.GIT把內容按元數據方式存儲,而SVN是按文件:因為git目錄是處于個人機器上的一個克隆版的版本庫,它擁有中心版本庫上所有的東西,例如標簽,分支,版本記錄等。
3.GIT分支和SVN的分支不同:svn會發生分支遺漏的情況,而git可以同一個工作目錄下快速的在幾個分支間切換,很容易發現未被合并的分支,簡單而快捷的合并這些文件。
4.GIT沒有一個全局的版本號,而SVN有
5.GIT的內容完整性要優于SVN:GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。
集中式和分布式的區別:
集中式版本控制系統:版本庫是集中存放在中央服務器的,而干活的時候,用的都是自己的電腦,所以要先從中央服務器取得最新的版本,然后開始干活,干完活了,再把自己的活推送給中央服務器。集中式版本控制系統最大的毛病就是必須聯網才能工作。
分布式版本控制系統:分布式版本控制系統根本沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。比方說你在自己電腦上改了文件A,你的同事也在他的電腦上改了文件A,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
為了方便“交換”大家的修改,分布式版本控制系統通常也有一臺充當“中央服務器”的電腦,但沒有它大家也一樣干活,只是交換修改不方便而已。
兩者的優勢比較
svn的優勢:
優異的跨平臺支持,對windows平臺支持非常友好。
簡單易用,安裝后稍微培訓下就知道怎么操作。
代碼,需求,文檔,涉及稿都可以用svn進行管理,適合不同部門的技術非技術的同事協作。
git的優勢:
去中心化:Git是沒有中心服務器的,每個人機器上都是一個完整的庫,我們平時開發代碼時的中央服務器其實和我們自己機器上的庫內容是完全一樣的(格式有點不同,是bare的)。雖然平時大家都是將代碼提交到中央服務器上再統一pull別人的代碼,但實際情況你可以總是pull張三的庫,然后push給李四等等操作。
本地提交:
本地提交好處主要有3點:
一, 斷網提交 。
二, 小步提交。可以對自己的階段成果有跟蹤,并且提高每次變更的安全性。
三,本地庫。這個和斷網提交是同一個實現,但從需求角度出發則略有不同,主要是說即使只有自己一個人開發項目,也可以輕易的讓自己的代碼有版本跟蹤,而不需要去費力建個什么svn server。
四,本地回滾。這個其實是由于本地庫的存在而產生的,但可以減少中央庫上的冗余版本
分支策略:在Git實際開發中分支的分離和merge是屬于日常操作,開啟和合并分支成本相比SVN要小得多:SVN是復制一份代碼到分支目錄,Git則是在分支點做一下標記。隨便一次沖突就會自動產生分支,所以大家每天都在與分支打交道。這便是弱化了分支的概念,由于分支成本很小,因此使得按功能分支的開發模式(每個分支一個功能,開發完了再merge到主干)變得非常簡單,大家可以完全不需要再因為擔心SCM成本太高而選用主干開發模式(所有功能都在主干上開發,到了發版本前再分離出分支)。
兩者的工作流對比:
svn模式
寫代碼。
從服務器拉回服務器的當前版本庫,并解決服務器版本庫與本地代碼的沖突。
將本地代碼提交到服務器。
git模式
寫代碼。
提交到本地版本庫。
從服務器拉回服務器的當前版本庫,并解決服務器版本庫與本地代碼的沖突。
將遠程庫與本地代碼合并結果提交到本地版本庫。
將本地版本庫推到服務器。
對比可以看出:分布式版本管理僅僅是增加了本地庫這個概念,其余的概念與集中管理并無區別。——但是 svn 在與服務器同步之前無法提交代碼,因而本地修改更容易出問題。
表格說明兩者區別:
Git-SVN常用命令
若服務器使用的 SVN,但是本地想要體驗 Git 的本地分支,離線操作等功能,可以使用 Git-SVN功能。
常用操作如下(圖片來源于網絡):
[ Git-SVN ]
# 下載一個 SVN 項目和它的整個代碼歷史,并初始化為 Git 代碼庫 $ git svn clone -s [repository] # 查看當前版本庫情況 $ git svn info # 取回遠程倉庫所有分支的變化 $ git svn fetch # 取回遠程倉庫當前分支的變化,并與本地分支變基合并 $ git svn rebase # 上傳當前分支的本地倉庫到遠程倉庫 $ git svn dcommit # 拉取新分支,并提交到遠程倉庫 $ svn copy [remote_branch] [new_remote_branch] -m [message] # 創建遠程分支對應的本地分支 $ git checkout -b [local_branch] [remote_branch]
一、初始化
從本節開始,除特殊說明,以下命令均適用于?Git?與?Git-SVN。
# 在當前目錄新建一個Git代碼庫 $ git init # 下載一個項目和它的整個代碼歷史 [Git only] $ git clone [url]
二、配置
# 列舉所有配置 $ git config -l # 為命令配置別名 $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.st status $ git config --global alias.br branch # 設置提交代碼時的用戶信息 $ git config [--global] user.name "[name]" $ git config [--global] user.email "[email address]"
Git 用戶的配置文件位于 ~/.gitconfig
Git 單個倉庫的配置文件位于 ~/$PROJECT_PATH/.git/config
三、增刪文件
# 添加當前目錄的所有文件到暫存區 $ git add . # 添加指定文件到暫存區 $ git add
四、分支
# 列出所有本地分支 $ git branch # 列出所有本地分支和遠程分支 $ git branch -a # 新建一個分支,但依然停留在當前分支 $ git branch [branch-name] # 新建一個分支,并切換到該分支 $ git checkout -b [new_branch] [remote-branch] # 切換到指定分支,并更新工作區 $ git checkout [branch-name] # 合并指定分支到當前分支 $ git merge [branch] # 選擇一個 commit,合并進當前分支 $ git cherry-pick [commit] # 刪除本地分支,-D 參數強制刪除分支 $ git branch -d [branch-name] # 刪除遠程分支 $ git push [remote] :[remote-branch]
五、提交
# 提交暫存區到倉庫區 $ git commit -m [message] # 提交工作區與暫存區的變化直接到倉庫區 $ git commit -a # 提交時顯示所有 diff 信息 $ git commit -v # 提交暫存區修改到倉庫區,合并到上次修改,并修改上次的提交信息 $ git commit --amend -m [message] # 上傳本地指定分支到遠程倉庫 $ git push [remote] [remote-branch]
六、拉取
# 下載遠程倉庫的所有變動 (Git only) $ git fetch [remote] # 顯示所有遠程倉庫 (Git only) $ git remote -v # 顯示某個遠程倉庫的信息 (Git only) $ git remote show [remote] # 增加一個新的遠程倉庫,并命名 (Git only) $ git remote add [remote-name] [url] # 取回遠程倉庫的變化,并與本地分支合并,(Git only), 若使用 Git-SVN,請查看第三節 $ git pull [remote] [branch] # 取回遠程倉庫的變化,并與本地分支變基合并,(Git only), 若使用 Git-SVN,請查看第三節 $ git pull --rebase [remote] [branch]
七、撤銷
# 恢復暫存區的指定文件到工作區 $ git checkout [file] # 恢復暫存區當前目錄的所有文件到工作區 $ git checkout . # 恢復工作區到指定 commit $ git checkout [commit] # 重置暫存區的指定文件,與上一次 commit 保持一致,但工作區不變 $ git reset [file] # 重置暫存區與工作區,與上一次 commit 保持一致 $ git reset --hard # 重置當前分支的指針為指定 commit,同時重置暫存區,但工作區不變 $ git reset [commit] # 重置當前分支的HEAD為指定 commit,同時重置暫存區和工作區,與指定 commit 一致 $ git reset --hard [commit] # 新建一個 commit,用于撤銷指定 commit $ git revert [commit] # 將未提交的變化放在儲藏區 $ git stash # 將儲藏區的內容恢復到當前工作區 $ git stash pop
八、查詢
# 查看工作區文件修改狀態 $ git status # 查看工作區文件修改具體內容 $ git diff [file] # 查看暫存區文件修改內容 $ git diff --cached [file] # 查看版本庫修改記錄 $ git log # 查看某人提交記錄 $ git log --author=someone # 查看某個文件的歷史具體修改內容 $ git log -p [file] # 查看某次提交具體修改內容 $ git show [commit]
https://mp.weixin.qq.com/s/6cNJjdK2SrcFP9Gc5S4U6g
Git SVN
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。