亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ディレクトリ 検索
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
テキスト

名稱

gittutorial  -  Git 的教程介紹

概要

git *

描述

本教程介紹了如何將新項目導入 Git,對其進行更改以及與其他開發(fā)人員共享更改。

如果您主要對使用 Git 獲取項目感興趣,例如,要測試最新版本,您可能更愿意從 “Git用戶手冊” 的前兩章開始。

首先,請注意,您可以獲取命令的文檔,例如git log --graph

$ man git-log

或者:

$ git help log

使用后者,您可以使用您選擇的手動查看器; 請參閱 git-help [1] 了解更多信息。

在進行任何操作之前,向 Git 介紹自己的姓名和公共電子郵件地址是一個好主意。最簡單的方法是:

$ git config --global user.name "Your Name Comes Here"$ git config --global user.email you@yourdomain.example.com

導入新項目

假設你的初始工作有一個 tarball project.tar.gz 。您可以按如下方式將它放在 Git 修訂控件下。

$ tar xzf project.tar.gz
$ cd project
$ git init

Git 回復

Initialized empty Git repository in .git/

您現(xiàn)在已初始化工作目錄 - 您可能會注意到創(chuàng)建了一個名為 “.git” 的新目錄。

接下來,告訴 Git 為當前目錄下的所有文件的內(nèi)容創(chuàng)建一個快照(注意.git add

$ git add .

此快照現(xiàn)在存儲在 Git 稱為“索引”的臨時區(qū)域中。您可以使用git commit命令將索引的內(nèi)容永久存儲在存儲庫中:

$ git commit

這會提示你輸入提交信息。您現(xiàn)在已經(jīng)將您的項目的第一個版本存儲在 Git 中。

進行更改

修改一些文件,然后將其更新的內(nèi)容添加到索引中:

$ git add file1 file2 file3

您現(xiàn)在已準備好提交。您可以使用git diff--cached 選項查看要提交的內(nèi)容:

$ git diff --cached

(不使用 - 緩存,git diff會顯示您已做出但未添加到索引的任何更改。)您還可以通過以git status方式獲得情況的簡要摘要:

$ git status
On branch master
Changes to be committed:Your branch is up-to-date with 'origin/master'.  (use "git reset HEAD <file>..." to unstage)

        modified:   file1
        modified:   file2
        modified:   file3

如果您需要進一步調(diào)整,請立即執(zhí)行此操作,然后將任何新修改的內(nèi)容添加到索引中。最后,通過以下方式進行修改:

$ git commit

這將再次提示您輸入描述更改的消息,然后記錄該項目的新版本。

或者,不要事先運行git add,您可以使用

$ git commit -a

它會自動注意到任何已修改(但不是新增)的文件,將它們添加到索引中,然后全部一步完成。

關于提交消息的注釋:雖然不是必需的,但最好先用一個簡短(少于50個字符)的行開始提交消息,然后再總結(jié)一個空行,然后進行更全面的描述。直到提交消息中的第一個空行的文本被視為提交標題,并且該標題在整個 Git 中使用。例如, git-format-patch [1] 將提交轉(zhuǎn)換為電子郵件,并使用主題行上的標題和正文中的其余提交。

Git 跟蹤內(nèi)容而不是文件

許多修訂控制系統(tǒng)提供一個add命令,告訴系統(tǒng)開始跟蹤對新文件的更改。Git 的add命令做了一些更簡單,更強大的功能:git add既可用于新文件又可用于新修改的文件,在這兩種情況下,它都會獲取給定文件的快照并為索引中的內(nèi)容創(chuàng)建階段,以供下一次提交使用。

查看項目歷史

在任何時候,您都可以使用查看更改的歷史記錄

$ git log

如果您還想在每個步驟中看到完整的差異,請使用

$ git log -p

通常情況下,變更的概述對于了解每一步是很有用的

$ git log --stat --summary

管理分支

一個 Git 倉庫可以維護多個分支的開發(fā)。要創(chuàng)建名為 “experimental” 的新分支,請使用

$ git branch experimental

如果你現(xiàn)在運行

$ git branch

你會得到所有現(xiàn)有分支的列表:

  experimental* master

"experimental" 分支是您剛剛創(chuàng)建的分支,“主分支”分支是自動為您創(chuàng)建的默認分支。星號標記你當前所在的分支類型;

$ git checkout experimental

切換到實驗分支。現(xiàn)在編輯一個文件,提交更改并切換回主分支:

(edit file)$ git commit -a
$ git checkout master

檢查您所做的更改是否不再可見,因為它是在實驗分支上創(chuàng)建的,而您又回到了主分支上。

您可以在主分支上進行不同的更改:

(edit file)$ git commit -a

在這一點上,兩個分支已經(jīng)發(fā)生了分歧,每個分支都有不同的變化。要將實驗中所做的更改合并到 master 中,請運行

$ git merge experimental

如果更改不沖突,則表示完成。如果有沖突,標記將留在顯示沖突的有問題的文件中;

$ git diff

會顯示這一點。一旦你編輯了文件來解決沖突,

$ git commit -a

將承諾合并的結(jié)果。最后,

$ gitk

將顯示最終的歷史記錄的一個很好的圖形表示。

在這一點上,你可以刪除實驗分支

$ git branch -d experimental

命令確保實驗分支中的更改已經(jīng)在當前分支中。

如果你在一個分支的思路發(fā)展,然后后悔了,你可以隨時刪除分支

$ git branch -D crazy-idea

分支機構既便宜又容易,所以這是嘗試一些東西的好方法。

使用git進行協(xié)作

假設 Alice 已經(jīng)在 / home / alice / project 中使用 Git 存儲庫啟動了一個新項目,并且在同一臺機器上有一個主目錄的 Bob 想要貢獻。

Bob 從以下開始:

bob$ git clone /home/alice/project myrepo

這會創(chuàng)建一個包含 Alice 存儲庫克隆的新目錄 “myrepo” ??寺∨c原始項目保持平等,擁有原始項目歷史的副本。

Bob 然后做出一些改變并提交它們:

(edit files)bob$ git commit -a(repeat as necessary)

當他準備好時,他告訴 Alice 從 / home / bob / myrepo 的存儲庫中提取更改。她這樣做:

alice$ cd /home/alice/project
alice$ git pull /home/bob/myrepo master

這將 Bob 的 “master” 分支的更改合并到 Alice 的當前分支中。如果 Alice 在此期間做出了自己的更改,那么她可能需要手動修復任何沖突。

因此,“pull” 命令執(zhí)行兩個操作:它從遠程分支獲取更改,然后將它們合并到當前分支。

請注意,一般來說,Alice 會希望在啟動此“拉”之前執(zhí)行其本地更改。如果 Bob 的工作與愛麗絲自歷史分手以來所做的工作相沖突,Alice 將使用她的工作樹和索引來解決沖突,而現(xiàn)有的本地更改將干擾沖突解決過程(Git 仍將執(zhí)行提取操作,但會拒絕合并 -  - Alice 將不得不以某種方式擺脫她的本地變化,并在發(fā)生這種情況時再次pull)。

Alice 可以通過使用“獲取”命令來查看 Bob 沒有合并的情況,這允許 Alice 使用特殊符號 “FETCH_HEAD” 來檢查 Bob 做了什么,以確定他是否有值得拉的東西,如下所示:

alice$ git fetch /home/bob/myrepo master
alice$ git log -p HEAD..FETCH_HEAD

即使 Alice 未提交本地更改,此操作也是安全的。范圍表示法 “HEAD..FETCH_HEAD” 表示 “顯示可從FETCH_HEAD 獲得的所有內(nèi)容,但排除可從 HEAD 獲得的任何內(nèi)容”。Alice 已經(jīng)知道導致她當前狀態(tài)的所有信息(HEAD),并且回顧 Bob 在他的狀態(tài)(FETCH_HEAD)中她沒有看到過這個命令。

如果 Alice 想要查看自從他們的歷史分支后 Bob 做了什么,她可以發(fā)出以下命令:

$ gitk HEAD..FETCH_HEAD

使用git log,我們看到前面的相同的兩點范圍表示法。

Alice 可能想看看自從他們分手以來他們都做了什么。她可以使用三點形式而不是雙點形式:

$ gitk HEAD...FETCH_HEAD

這意味著“顯示任何一個都可以訪問的東西,但排除任何可以從兩者中獲得的東西”。

請注意,這些范圍表示法可以與 gitk 和 “git log” 一起使用。

在檢查 Bob 做了什么之后,如果沒有任何緊急事件,Alice可能會決定繼續(xù)工作而不從 Bob 那里 pull 。如果 Bob的歷史確實需要 Alice 立即需要的東西,艾麗斯可能會選擇先擱置她正在進行的工作,做一次 “pull”,然后最終在最終的歷史之外取消正在進行的工作。

當你在一個緊密團結(jié)的小團隊中工作時,一次又一次地與同一個存儲庫進行交互并不少見。通過定義remote存儲庫速記,可以使其更容易:

alice$ git remote add bob /home/bob/myrepo

有了這個,Alice 可以使用git fetch命令單獨執(zhí)行 “pull” 操作的第一部分,而不用將它們與自己的分支合并,使用:

alice$ git fetch bob

與 longhand 形式不同的是,當 Alice 使用遠程倉庫快速設置從 Bob 獲取時git remote,在這種情況下,獲取的內(nèi)容存儲在遠程跟蹤分支中bob/master。所以在這之后:

alice$ git log -p master..bob/master

顯示了 Bob 從 Alice 的主分支中分支后所做的所有更改的列表。

在檢查這些更改后,Alice 可以將更改合并到她的主分支中:

alice$ git merge bob/master

merge也可以通過pulling from her own remote-tracking branch如下方式完成:

alice$ git pull . remotes/bob/master

注意 git pull 總是合并到當前分支中,而不管命令行上給出的是什么。

之后,Bob可以使用Alice的最新更改更新其回購

bob$ git pull

請注意,他不需要為 Alice 的存儲庫提供路徑; 當 Bob 克隆 Alice 的存儲庫時,Git 將其存儲庫的位置存儲在存儲庫配置中,并且位置用于提?。?/p>

bob$ git config --get remote.origin.url/home/alice/project

(創(chuàng)建的完整配置git clone使用可見git config -l,而 git-config [1] 手冊頁解釋每個選項的含義。)

Git 還以 “origin / master” 的名稱保存了 Alice 主分支的原始副本:

bob$ git branch -r
  origin/master

如果Bob后來決定從另一個主機上工作,他仍然可以使用 ssh 協(xié)議執(zhí)行 clone 和 pull 操作:

bob$ git clone alice.org:/home/alice/project myrepo

另外,Git 有一個本地協(xié)議,或者可以使用 http ; 有關詳細信息,請參閱 git-pull [1]。

Git 也可以用于類似 CVS 的模式,帶有各種用戶推送更改的中央存儲庫; 請參閱 git-push [1] 和 gitcvs-migration [7]。

探索歷史

Git 歷史被表示為一系列相關的提交。我們已經(jīng)看到git log命令可以列出這些提交。請注意,每個 git 日志條目的第一行還提供了提交的名稱:

$ git log
commit c82a22c39cbc32576f64f5c6b3f24b99ea8149c7
Author: Junio C Hamano <junkio@cox.net>Date:   Tue May 16 17:18:22 2006 -0700

    merge-base: Clarify the comments on post processing.

我們可以通過這個名字來git show查看關于這個提交的細節(jié)。

$ git show c82a22c39cbc32576f64f5c6b3f24b99ea8149c7

但還有其他方式可以參考提交。您可以使用足夠長的名稱的任何起始部分來唯一標識提交:

$ git show c82a22c39c        # the first few characters of the name are
                        # usually enough
$ git show HEAD                # the tip of the current branch
$ git show experimental        # the tip of the "experimental" branch

每個提交通常都有一個指向項目前一個狀態(tài)的“父”提交:

$ git show HEAD^  # to see the parent of HEAD
$ git show HEAD^^ # to see the grandparent of HEAD
$ git show HEAD~4 # to see the great-great grandparent of HEAD

請注意,合并提交可能有多個父代:

$ git show HEAD^1 # show the first parent of HEAD (same as HEAD^)$ git show HEAD^2 # show the second parent of HEAD

你也可以提交你自己的名字; 跑完之后

$ git tag v2.5 1b2e1d63ff

您可以通過名稱 “v2.5” 來引用 1b2e1d63ff 。如果你打算與其他人分享這個名字(例如,識別發(fā)布版本),你應該創(chuàng)建一個“標簽”對象,并且可能簽名; 有關詳細信息,請參閱 git-tag [1] 。

任何需要提交的 Git 命令都可以采用這些名稱中的任何一個。例如:

$ git diff v2.5 HEAD         # compare the current HEAD to v2.5$ git branch stable v2.5 # start a new branch named "stable" based
                         # at v2.5$ git reset --hard HEAD^ # reset your current branch and working
                         # directory to its state at HEAD^

請注意最后一條命令:除了在工作目錄中丟失任何更改之外,它還會從此分支中刪除所有稍后的提交。如果這個分支是包含這些提交的唯一分支,它們將會丟失。另外,不要在其他開發(fā)者從其公開的分支上使用git reset,因為這會迫使其他開發(fā)人員不必要的合并來清理歷史記錄。如果您需要撤消您推送的更改,請改為使用git revert。

git grep命令可以在任何版本的項目中搜索字符串,所以

$ git grep "hello" v2.5

在v2.5中搜索所有“hello”。

如果省略提交名稱,git grep將搜索它在當前目錄中管理的任何文件。所以

$ git grep "hello"

是一種快速搜索 Git 跟蹤文件的方法。

許多 Git 命令也會提交一組提交,這些提交可以通過多種方式指定。以下是一些示例git log

$ git log v2.5..v2.6            # commits between v2.5 and v2.6$ git log v2.5..                # commits since v2.5$ git log --since="2 weeks ago" # commits from the last 2 weeks
$ git log v2.5.. Makefile       # commits since v2.5 which modify
                                # Makefile

你也可以給出git log一個“范圍”的提交,其中第一個不一定是第二個的父類; 例如,如果分支機構的“穩(wěn)定”和“主機”的提示早于一個普通的提交,那么

$ git log stable..master

將列出在主分支中進行的提交,但不在穩(wěn)定分支中進行提交

$ git log master..stable

將顯示穩(wěn)定分支上的提交列表,但不顯示主分支上的提交列表。

git log命令有一個弱點:它必須在列表中提交提交。當歷史的發(fā)展路線發(fā)生分化,然后合并到一起時,git log呈現(xiàn)這些提交的順序就沒有意義了。

大多數(shù)具有多個貢獻者的項目(如 Linux 內(nèi)核或 Git 本身)經(jīng)常合并,gitk更好地將其歷史記錄可視化。例如,

$ gitk --since="2 weeks ago" drivers/

允許您瀏覽在 “drivers” 目錄下提交修改文件的最后2周提交的任何提交。(注意:按住“ - ”或“+”鍵的同時按住控制鍵可以調(diào)整 gitk 的字體。)

最后,大多數(shù)采用文件名的命令可以選擇允許您在提交之前的任何文件名前面指定文件的特定版本:

$ git diff v2.5:Makefile HEAD:Makefile.in

您也可以使用git show查看任何此類文件:

$ git show v2.5:Makefile

下一步

本教程應該足以為您的項目執(zhí)行基本的分布式版本控制。但是,要充分理解 Git 的深度和功能,您需要理解它所基于的兩個簡單的想法:

  • 對象數(shù)據(jù)庫是相當優(yōu)雅的系統(tǒng),用于存儲項目的歷史記錄,目錄和提交。

  • 索引文件是目錄樹狀態(tài)的緩存,用于創(chuàng)建提交,檢出工作目錄,并保存合并中涉及的各種樹。

本教程的第二部分將介紹對象數(shù)據(jù)庫,索引文件以及您需要充分利用 Git 所需的其他一些優(yōu)勢和缺點。你可以在 gittutorial-2 [7] 找到它。

如果您不想立即繼續(xù),那么在這一點上可能有趣的一些其他偏差:

  • git-format-patch [1],git-am [1]:這些將 git 提交系列轉(zhuǎn)換為電子郵件補丁,反之亦然,這對 Linux 內(nèi)核等依賴電子郵件補丁的項目非常有用。

  • git-bisect [1]:當你的項目出現(xiàn)回歸時,追蹤錯誤的一種方法是通過搜索歷史記錄來找到應該歸咎于的確切提交。Git bisect 可以幫助您執(zhí)行該提交的二進制搜索。即使在具有大量合并分支的復雜非線性歷史的情況下,它也足夠聰明地執(zhí)行接近最優(yōu)的搜索。

  • gitworkflows [7]:概述推薦的工作流程。

  • giteveryday [7]:每天 Git 與20個命令或者如此。

  • gitcvs-migration [7]:CVS 用戶的 Git。

前の記事: 次の記事: