組長(zhǎng):楊磊(計(jì)科高職13-3)201303014107
Github 倉(cāng)庫(kù): https://github.com/yangleiwangximin/
https://github.com/yangleiwangximin/test/blob/master/Test3.java
第三題
Git 是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),用以有效、高速的處理從很小到非常大的項(xiàng)目版本管理
http://code.google.com/p/msysgit/ ?可以下載 windows 版本的
http://www.pudn.com/search_db.asp?keyword=git ?可以下載 git? 源碼安裝在 linux 中
1) 解壓? tar?-zxvf?git-1.6.0.tar.gz????????2) 進(jìn)入解壓目錄? cd?git-1.6.0????????3) 執(zhí)行? make?prefix=/usr/local?all????????4) 執(zhí)行 ??make?prefix=/usr/local?install
?
有兩種取得? Git? 項(xiàng)目倉(cāng)庫(kù)的方法。第一種是在現(xiàn)存的目錄下,通過(guò)導(dǎo)入所有文件來(lái)創(chuàng)建新的? Git? 倉(cāng)庫(kù)。第二種是從已有的? Git? 倉(cāng)庫(kù)克隆出一個(gè)新的鏡像倉(cāng)庫(kù)來(lái)。
一.從當(dāng)前目錄初始化? Git?init
初始化后,在當(dāng)前目錄下會(huì)出現(xiàn)一個(gè)名為? .git? 的目錄,所有? Git? 需要的數(shù)據(jù)和資源都存放在這個(gè)目錄中。
二. git?clone?ssh://r10003@192.168.10.124/git/mx28/linux-2.6-imx.git
將遠(yuǎn)程倉(cāng)庫(kù)克隆到本地,目錄名為 linux-2.6-imx 并在目錄下創(chuàng)建 .git 目錄。如果希望在克隆的時(shí)候,自己定義要新建的項(xiàng)目目錄名稱(chēng),
可以在上面的命令最后指定: /linux-2.6-imx.git??Mylinux
SSH? 為建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議。
在客戶端執(zhí)行
Ssh? 用戶名 @192.168.10.124 ??// 使用 192.168.10.124 某一指定的用戶名和密碼登陸
后面的 git/mx28 就是目錄了
?
Git 中從遠(yuǎn)程的分支獲取最新的版本到本地有這樣 2 個(gè)命令:相反就有一個(gè)命令
git?fetch :相當(dāng)于是從遠(yuǎn)程獲取最新版本到本地,不會(huì)自動(dòng) merge
git?fetch?origin?master?git?log?-p?master..origin/master?git?merge?origin/master
?
???? 以上命令的含義:? ??? 首先從遠(yuǎn)程的 origin 的 master 主分支下載最新的版本到 origin/master 分支上? ??? 然后比較本地的 master 分支和 origin/master 分支的差別? ??? 最后進(jìn)行合并
git?pull :相當(dāng)于是從遠(yuǎn)程獲取最新版本并 merge 到本地
?
git?pull?origin?master
?
上述命令其實(shí)相當(dāng)于 git?fetch? 和? git?merge? 在實(shí)際使用中, git?fetch 更安全一些?因?yàn)樵? merge 前,我們可以查看更新情況,然后再?zèng)Q定是否合并
git?pull?origin?master 是將 origin 這個(gè)版本庫(kù)的代碼更新到本地的 master 主分支
?
git?log???? 查看提交信息 ?? 看你 commit 的日志
git?log?-p???? 查看歷次的 log 信息及更改情況 ??? 看到的是跟補(bǔ)丁一樣的修改信息
git?log?-p?-4???? 查看距現(xiàn)在最近的 4 次的 log 信息及更改情況
git?log?frameworks/???? 查看關(guān)于 frameworks/ 目錄修改相關(guān)的 log 信息
git?log?--stat???? 查看 log 顯示文件修改情況
git?log?--stat?packages/apps/Contacts/???? 查看關(guān)于 packages/apps/Contacts/ 目錄修改相關(guān)的 log 顯示的文件修改情況
git 與 gitk 的區(qū)別
有時(shí)候圖形化工具更容易展示歷史提交的變化,隨? Git? 一同發(fā)布的? gitk? 就是這樣一種工具。它是用? Tcl/Tk? 寫(xiě)成的,基本上相當(dāng)于? git?log? 命令的可視化版本,凡是? git?log? 可以用的選項(xiàng)也都能用在? gitk? 上。在項(xiàng)目工作目錄中輸入? gitk? 命令后。上半個(gè)窗口顯示的是歷次提交的分支祖先圖譜,下半個(gè)窗口顯示當(dāng)前點(diǎn)選的提交對(duì)應(yīng)的具體差異。
?
git?status???? 查看工作目錄和代碼倉(cāng)庫(kù)的改動(dòng)情況
?
git?diff? 查看工作目錄和本地倉(cāng)庫(kù)的差異或者本地倉(cāng)庫(kù)各個(gè)版本的差異
git?diff? 會(huì)使用文件補(bǔ)丁的格式顯示具體添加和刪除的行。
請(qǐng)注意,單單? git?diff? 不過(guò)是顯示還沒(méi)有暫存起來(lái)的改動(dòng),而不是這次工作和上次提交之間的差異。所以有時(shí)候你一下子暫存了所有更新過(guò)的文件后,運(yùn)行? git?diff? 后卻什么也沒(méi)有,就是這個(gè)原因。?可以 cat?diff 看一下實(shí)際的輸出信息? cat:?diff:?No?such?file?or?directory
git?diff?packages/apps/Contacts/AndoridManifest.xml???? 查看工作目錄中 AndoridManifest.xml 和本地倉(cāng)庫(kù)中 AndoridManifest.xml 的不同
git?diff?b46cae3b9a377bcd9cfc249a5778fce647feb961?dc94bf29aab18168e79d6496a89e47dba7a1d494???? 查看這兩個(gè)版本的不同 (git?diff?history_old?history_current)
?
git?commit? 提交當(dāng)前修改內(nèi)容?提交只是提交到本地倉(cāng)庫(kù)
git?commit?file1?file2?-m?"log?message"???? 提交 file1 , file2 到本地倉(cāng)庫(kù)
git?commit?-a?-m?"log?message"? 提交所有在 Git 索引中的改動(dòng) ?? 有 -a 代表不用 add 了
有時(shí)候我們提交完了才發(fā)現(xiàn)漏掉了幾個(gè)文件沒(méi)有加,或者提交信息寫(xiě)錯(cuò)了。想要撤消剛才的提交操作,可以使用? --amend? 選項(xiàng)重新提交:
$?git?commit?-m?'initial?commit'
$?git?add?forgotten_file
$?git?commit?--amend
上面的三條命令最終得到一個(gè)提交,第二個(gè)提交命令修正了第一個(gè)的提交內(nèi)容。
?
git?add? 增加文件到 Git 索引
git?add?file3?file4???? 將 file3 , file4 加入到 Git 索引中 ???git?add? 僅是暫存不是提交
git?rm? 從 Git 索引移除文件
git?rm?file3???? 將 file3 從 Git 索引中刪除
git?branch???? 對(duì)分支的增、刪、查操作
git?branch???? 顯示所有本地分支
git?branch?new_branch???? 在當(dāng)前版本創(chuàng)建一個(gè)名為 new_branch 的分支
git?branch?-D?new_branch???? 強(qiáng)制刪除名為 new_branch 的分支
git?checkout???? 在不同的 branch 切換和還原文件
git?checkout?branch1???? 切換到 branch1 分支?切換前最好把工作目錄 add 并提交否則切換后會(huì)報(bào)錯(cuò)或者工作目錄不換還原
git?checkout?/packages/apps/Contacts/AndroidManifest.xml???? 會(huì)將 AndroidManifest.xml 文件從上一次提交的版本更新回來(lái),未提交的部分會(huì)全部回滾
??????
git?remote 查看當(dāng)前配置有哪些遠(yuǎn)程倉(cāng)庫(kù)
git?remote?add?pb?git://github.com/paulboone/ticgit.git 要添加一個(gè)新的遠(yuǎn)程倉(cāng)庫(kù),可以指定一個(gè)簡(jiǎn)單的名字,以便將來(lái)引用
git?remote?show?origin 查看某個(gè)遠(yuǎn)程倉(cāng)庫(kù)的詳細(xì)信息
?
git?tag 列顯已有的標(biāo)簽
git?tag?-a?v1.4?-m?'my?version?1.4' 創(chuàng)建一個(gè)含附注類(lèi)型的標(biāo)簽? V1.4
?
git?revert? 是撤銷(xiāo)某次操作,此次操作之前的 commit 都會(huì)被保留
git?reset? 是撤銷(xiāo)某次提交,但是此次之后的修改都會(huì)被退回到暫存區(qū)
?
git?reset? 將當(dāng)前的工作目錄完全回滾到指定的版本號(hào)
git?reset?[--fixed]?3204f2f0bdfd6ada86c587b8927cdc5a15c586c1???? 只更新索引,不更新工作目錄,也就是說(shuō)所有的本地文件都不會(huì)更新
?
打補(bǔ)丁
一.方法一比較通用
Git?commit?? 比如在 PATH 分支提交后
Git?diff?master>patch? 創(chuàng)建補(bǔ)丁文件
Git?checkout?master? 回到主分支
Git?apply?patch? 通過(guò) patch 打補(bǔ)丁
二.
Git?conmmit? 先在一個(gè)分支提交
Git?format_patch?–M?master? 生成 .patch 補(bǔ)丁文件
Git?checkoutmaster? 回到需要打補(bǔ)丁的分支
Git?am?***.patch? 打補(bǔ)丁 ?????????? 打完補(bǔ)丁相當(dāng)于完成一次提交
遇到問(wèn)題 ?? 錯(cuò)誤提示信息
previous?rebase?directory?/home/hailong/Workspace/zhl/.git/rebase-apply?still?exists?but?mbox?given.
在用 git?am 提交 patch 時(shí),有時(shí)在提交失敗后,繼續(xù)提交時(shí)會(huì)出現(xiàn) /.git/rebase-apply?still?exists?but?mbox?given 錯(cuò)誤,因?yàn)殄e(cuò)誤的提交導(dǎo)致 git 內(nèi)部的數(shù)據(jù)出現(xiàn)了錯(cuò)誤,因此繼續(xù)提交 patch 就會(huì)報(bào)錯(cuò), 1. 使用 git?am?--abort 命令將 git 的狀態(tài)恢復(fù)到之前狀態(tài)就可以繼續(xù)提交 patch 了。 2.? 直接刪除 /home/hailong/Workspace/zhl/.git/rebase-apply 這個(gè)目錄的。
每次提交 patch 之前需要執(zhí)行 review-commits 命令來(lái)檢查 patch 的編程規(guī)范,有錯(cuò)誤的地方,都會(huì)有 warning 或 error 的提示,修改之后執(zhí)行 1.?git?add?xxx?2.?git?commit?–amend? 再 push
?
$?git?config?--global?user.name?"Hailong"??? 設(shè)置用戶信息
$?git?config?--global?user.email?Hailong@example.com
git?config?–list 查看配置信息
?
獲取幫助
想了解? Git? 的各式工具該怎么用,可以閱讀它們的使用幫助,方法有三:
$?git?help
$?git?--help
$?man?git-
?
(轉(zhuǎn))技巧和竅門(mén)
在結(jié)束本章之前,我還想和大家分享一些? Git? 使用的技巧和竅門(mén)。很多使用? Git? 的開(kāi)發(fā)者可能根本就沒(méi)用過(guò)這些技巧,我們也不是說(shuō)在讀過(guò)本書(shū)后非得用這些技巧不可,但至少應(yīng)該有所了解吧。說(shuō)實(shí)話,有了這些小竅門(mén),我們的工作可以變得更簡(jiǎn)單,更輕松,更高效。
2.7.1? 自動(dòng)完成
如果你用的是? Bash?shell ,可以試試看? Git? 提供的自動(dòng)完成腳本。下載? Git? 的源代碼,進(jìn)入? contrib/completion? 目錄,會(huì)看到一個(gè)? git-completion.bash? 文件。將此文件復(fù)制到你自己的用戶主目錄中(譯注:按照下面的示例,還應(yīng)改名加上點(diǎn): cp?git-completion.bash?/.git-completion.bash ),并把下面一行內(nèi)容添加到你的? .bashrc? 文件中:
source?~/.git-completion.bash
也可以為系統(tǒng)上所有用戶都設(shè)置默認(rèn)使用此腳本。 Mac? 上將此腳本復(fù)制到? /opt/local/etc/bash_completion.d? 目錄中, Linux? 上則復(fù)制到? /etc/bash_completion.d/? 目錄中即可。這兩處目錄中的腳本,都會(huì)在? Bash? 啟動(dòng)時(shí)自動(dòng)加載。
如果在? Windows? 上安裝了? msysGit ,默認(rèn)使用的? Git?Bash? 就已經(jīng)配好了這個(gè)自動(dòng)完成腳本,可以直接使用。
在輸入? Git? 命令的時(shí)候可以敲兩次跳格鍵( Tab ),就會(huì)看到列出所有匹配的可用命令建議:
$?git?co
commit?config
此例中,鍵入? git?co? 然后連按兩次? Tab? 鍵,會(huì)看到兩個(gè)相關(guān)的建議(命令)? commit? 和? config 。繼而輸入? m? 會(huì)自動(dòng)完成? git?commit? 命令的輸入。
命令的選項(xiàng)也可以用這種方式自動(dòng)完成,其實(shí)這種情況更實(shí)用些。比如運(yùn)行? git?log? 的時(shí)候忘了相關(guān)選項(xiàng)的名字,可以輸入開(kāi)頭的幾個(gè)字母,然后敲? Tab? 鍵看看有哪些匹配的:
$?git?log?--s
--shortstat?--since=?--src-prefix=?--stat?--summary
這個(gè)技巧不錯(cuò)吧,可以節(jié)省很多輸入和查閱文檔的時(shí)間。
2.7.2?Git? 命令別名
Git? 并不會(huì)推斷你輸入的幾個(gè)字符將會(huì)是哪條命令,不過(guò)如果想偷懶,少敲幾個(gè)命令的字符,可以用? git?config? 為命令設(shè)置別名。來(lái)看看下面的例子:
$?git?config?--global?alias.co?checkout
$?git?config?--global?alias.br?branch
$?git?config?--global?alias.ci?commit
$?git?config?--global?alias.st?status
現(xiàn)在,如果要輸入? git?commit? 只需鍵入? git?ci? 即可。而隨著? Git? 使用的深入,會(huì)有很多經(jīng)常要用到的命令,遇到這種情況,不妨建個(gè)別名提高效率。
使用這種技術(shù)還可以創(chuàng)造出新的命令,比方說(shuō)取消暫存文件時(shí)的輸入比較繁瑣,可以自己設(shè)置一下:
$?git?config?--global?alias.unstage?'reset?HEAD?--'
這樣一來(lái),下面的兩條命令完全等同:
$?git?unstage?fileA
$?git?reset?HEAD?fileA
顯然,使用別名的方式看起來(lái)更清楚。另外,我們還經(jīng)常設(shè)置? last? 命令:
$?git?config?--global?alias.last?'log?-1?HEAD'
然后要看最后一次的提交信息,就變得簡(jiǎn)單多了:
Scott?Chacon?Pro?Git?2.8 節(jié)?小結(jié)
$?git?last
commit?66938dae3329c7aebe598c2246a8e6af90d04646
Author:?Josh?Goebel
Date:?Tue?Aug?26?19:48:51?2008?+0800
test?for?current?head
Signed-off-by:?Scott?Chacon
可以看出,實(shí)際上? Git? 只是簡(jiǎn)單地在命令中替換了你設(shè)置的別名。不過(guò)有時(shí)候我們希望運(yùn)行某個(gè)外部命令,而非? Git? 的附屬工具,這個(gè)好辦,只需要在命令前加上? !? 就行。如果你自己寫(xiě)了些處理? Git? 倉(cāng)庫(kù)信息的腳本的話,就可以用這種技術(shù)包裝起來(lái)。作為演示,我們可以設(shè)置用? git?visual? 啟動(dòng)? gitk :
$?git?config?--global?alias.visual?"!gitk"
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
