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

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