分散型バージョン管理システム--Git詳細

はじめに:


コード開発者は、各現像剤をクローニングすることにより、ローカルに、ローカルマシン上のリポジトリのgitの完全なコピーを提出することができると集中最大の違いを比較する上に分布。

図は、古典的なGitの開発プロセスであります:

分散型バージョン管理システム--Git詳細

Gitは以下の特徴を:

  • 単一のサーバーから(コード及びバージョン情報を含む)完全なgitリポジトリのクローニング。
  • 異なる開発目的に基づいて自分のマシンでは、ブランチを作成し、コードを変更。
  • 独自のスタンドアローンの作成上の枝の上にコードを提出してください。
  • 単一の分岐上で組み合わせます。
  • サーバコードの最新バージョンはダウンフェッチして、そのメインブランチにマージ。
  • パッチ、主変速開発者にパッチを生成するステップと

gitのは、この点をご紹介について、次はgitのの基本的な操作を紹介します。

ボーエン概要:

  • まず、gitのインストール
  • 第二に、gitのリポジトリを作成してご紹介
  • 第三に、基本的な操作のgitリポジトリ
  • 第四に、元に戻すには、能力が操作を変更します
  • githubのにV.関連付けるローカルgitリポジトリ
  • 第六に、ローカルのgitリポジトリにgithubのからダウンロード

gitのは、Windows版、Mac、Linuxや他のオペレーティングシステム上にインストールここでは、Linuxシステムをインストールする方法について書き、その基本的な操作することができます。

まず、gitのインストール

次のように非常に単純な、それはコマンドは、次のとおりです。

[root@git ~]# yum -y install git

第二に、gitのリポジトリを作成してご紹介

#最好使用一个空的目录作为git库
[root@git ~]# mkdir git
[root@git ~]# cd git
[root@git git]# git init   #在空目录下初始化为git库
初始化空的 Git 版本库于 /root/git/.git/
[root@git git]# ls -a      #初始化成功后,会生成一个.git的隐藏目录
.  ..  .git
#生成的隐藏目录是用来跟踪管理版本库的,不建议随便修改其目录中的文件,
#如果改乱了,就把git库给破坏了。

ワークエリア、ステージングエリア、リポジトリ:gitのリポジトリには、三つの重要な概念があります。

  • ワークスペース:お使いのシステムはカタログで見ることができるです。
  • テンポラリー・エリア:一般.gitディレクトリにインデックスファイルに保存されている、それはインデックスと呼ばれるステージングエリアとなります。
  • リポジトリ:隠された.gitディレクトリがあり、これは、作業ワークスペースの面積が、gitのレポジトリではありません。

次の図に示すワークスペース、ステージング領域のリポジトリとリポジトリとの間の関係:

分散型バージョン管理システム--Git詳細

リポジトリのエリアで「インデックス」と表示されたリポジトリの右側のワークエリアの左側、上図は、「マスター」は、ディレクトリツリーの代わりにmasterブランチであるとしてマークされ、ステージング領域です。

作業領域を変更する(または新規)ファイルは、ワークエリアが変更(または追加)する一方で、「gitの追加」コマンド、ディレクトリツリーが更新されたステージング領域を実行すると、ファイルの内容は、オブジェクトライブラリに書き込まれます新しいオブジェクト、およびオブジェクトIDは、ファイルインデックスの一時的な領域に記録されています。

コミットを行う場合には(コミットGIT)、masterブランチでリポジトリ(オブジェクトライブラリ)への一時領域の書き込みでのディレクトリツリーが更新されます。ディレクトリツリーの一時的なディレクトリツリー領域、すなわちマスターポイントが提出されます。

当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。

当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

三、git库的基本操作

#需要先自报家门,声明姓名及邮箱
[root@git git]# git config --global user.name "ljz"
[root@git git]# git config --global user.email "[email protected]"
[root@git git]# echo "aaaa" > git.txt      #创建一个文件用于测试
[root@git git]# git add git.txt       #将测试文件添加到暂存区
[root@git git]# git commit -m "第一次提交"     
#将暂存区的文件提交到版本库,并且一定要使用“-m”选项注明提交说明
[master(根提交) eecbb4d] 第一次提交
 1 file changed, 1 insertion(+)
 create mode 100644 git.txt
[root@git git]# echo "bbbb" >> git.txt      #修改测试文件内容
[root@git git]# git add git.txt       #添加到暂存区
[root@git git]# git status        #查看git的状态
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#   修改:      git.txt      #可以看到提示git.txt已被修改
#新建几个测试文件
[root@git git]# echo "第二个测试文件" > git2.txt
[root@git git]# echo "第三个测试文件" > git3.txt
[root@git git]# ls           #确认新建的测试文件
git2.txt  git3.txt  git.txt
[root@git git]# git add git2.txt git3.txt         #一次提交多个文件
[root@git git]# git status   #查看git的状态
# 位于分支 master
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#   修改:      git.txt
#   新文件:    git2.txt
#   新文件:    git3.txt
#上面是提示git被修改,并且添加了两个新的文件
[root@git git]# git commit -m "提交多个版本"    #将暂存区的多个版本进行提交
[master 86c5044] 提交多个版本
 3 files changed, 3 insertions(+)
 create mode 100644 git2.txt
 create mode 100644 git3.txt
[root@git git]# git log --pretty=oneline         #查看提交记录,一行对应一次提价记录
86c50445d84591741812e0bd9088a1c67bf5e9ec 提交多个版本
eecbb4d9ff025681b4abe4ec2bdd90eeb0b66fd6 第一次提交

#至此,git库下的所有文件都被提交了,那么,我现在将本地的所有文件都删除,查看下git的状态是什么
[root@git git]# rm git*       #删除当前目录下所有的测试文件
[root@git git]# git status        #查看git的状态
# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#   删除:      git.txt
#   删除:      git2.txt
#   删除:      git3.txt
#上述提示了删除了三个文件,下面说的是修改了但是尚未提交
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

#那么,我现在若想恢复删除的文件呢?只需进行以下操作:
[root@git git]# git reflog --pretty=oneline         #查看提交记录
86c5044 HEAD@{0}: commit: 提交多个版本
eecbb4d HEAD@{1}: commit (initial): 第一次提交
[root@git git]# ls       #确定当前目录下没有任何测试文件
[root@git git]# git reset --hard 86c5044      #版本回滚到指定提交的文职
HEAD 现在位于 86c5044 提交多个版本
[root@git git]# ls      #再次查看,被删除的文件又回来了
git2.txt  git3.txt  git.txt

#那么,现在我想要恢复到第一次提交的时候呢?

[root@git git]# git reflog --pretty=oneline      #同样需要查看其日志记录
86c5044 HEAD@{0}: commit: 提交多个版本
eecbb4d HEAD@{1}: commit (initial): 第一次提交
[root@git git]# git reset --hard HEAD@{1}        #对,在版本回滚时,不但可以指定第一列的ID号,也可以指定其HEAD字段
HEAD 现在位于 eecbb4d 第一次提交
[root@git git]# ls    #再次查看当前工作目录下,恢复到了最初只有一个测试文件的状态
git.txt
[root@git git]# git reset --hard 86c5044          #再次恢复到测试文件最多的时候
HEAD 现在位于 86c5044 提交多个版本
[root@git git]# ls
git2.txt  git3.txt  git.txt

四、撤销修改的操作

关于撤销修改,其实在上面已经展示出来如何从版本库中撤销修改了,那么下面将介绍如何从暂存区、工作台进行撤销修改

1、从工作台撤销修改


[root@git git]# cat git.txt   #确定当前文件内容
aaaa
bbbb
[root@git git]# echo "cccc" >> git.txt      #修改文件内容
[root@git git]# cat git.txt       #查看修改后的文件
aaaa 
bbbb
cccc
[root@git git]# git checkout -- git.txt            #对工作台执行撤销操作
[root@git git]# cat git.txt         #确认新添加的内容被撤销
aaaa
bbbb

2、从暂存区撤销修改

[root@git git]# echo "abcd" > ljz.txt     #创建新的测试文件
[root@git git]# git add ljz.txt              #添加至暂存区
[root@git git]# git status           #查看git状态
# 位于分支 master 
# 要提交的变更:
#   (使用 "git reset HEAD <file>..." 撤出暂存区)
#
#   新文件:    ljz.txt        #提示有新添加的文件
[root@git git]# git reset HEAD ljz.txt         #执行撤销操作
[root@git git]# git status       #再次查看git的状态,提示提交为空,还提示使用git add建立提交
# 位于分支 master
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#   ljz.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

3、从版本库中删除指定版本

[root@git git]# rm git.txt       #删除本地文件
[root@git git]# git rm git.txt        #使用git执行rm命令
[root@git git]# git commit -m "删除文件"     #提交到版本库,

至此,都只是git版本库的基本操作,那么?我们如何将我们的git
库关联到github上呢?下面是两种情况下的关联方法。

五、将本地git库关联到github

情况一:本地有git库,github库是空的:

1、首先需要先创建一个空的github库。

自行注册github账号并登陆,比较简单,这里就不写了。

分散型バージョン管理システム--Git詳細

分散型バージョン管理システム--Git詳細

在主机上生成秘钥对,并上传至github上:

[root@git git]# ssh-keygen -t rsa -C "[email protected]"        #执行此命令后,一路按回车即可,“-C”后面是自己的邮箱地址
[root@git git]# cat ~/.ssh/id_rsa.pub     #查看生成的公钥,并复制其内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5ubfu4/UxpX/1aW3bPLUBihphbC0sUkmM0NusofTEW2rQ6Fy4+tRb2qvDLm6XXXBIzDNcr16qFGE95OFmhGF+M+TjjjvVyMFQu+qLjyfRceiYlLZ6II0ZY5+agQJSYlFYYyvHhJHFo69S07jx5A7Q2doLpW+O0i2MLdY0CyKvlRgE9Onoj+8TM9ZBfJdtoAGQdkH353NeiFJOJi71+KQgvvzpRiRiRjTv4mLGuWdeAAhxG1+rGnyotQktiobHGHKPLpm9w/PT95tuKQ/d8zH4BqsDkWuzIMy5E0vhELpEHFBilx6YuPL2h1N8YSFARxyz4zRPAQoCeATdgA+nD68z [email protected]

在github上操作如下,以便添加公钥:
分散型バージョン管理システム--Git詳細

分散型バージョン管理システム--Git詳細

分散型バージョン管理システム--Git詳細

分散型バージョン管理システム--Git詳細

输入github账号的密码进行验证:
分散型バージョン管理システム--Git詳細

确定添加成功:

分散型バージョン管理システム--Git詳細

2、

回到新创建的库:
分散型バージョン管理システム--Git詳細
分散型バージョン管理システム--Git詳細
分散型バージョン管理システム--Git詳細

[root@git git]# ls -a       #当前的工作目录必须是一个git库
.  ..  .git  git2.txt  git3.txt  git.txt  ljz.txt
[root@git git]# git remote add origin [email protected]:lvjianzhao/test01.git  #执行提示的第一条命令
[root@git git]# git push -u origin master        #进行提交,由于是第一次上传,所以需要使用“-u”选项
#如果执行上述命令后,提示需要输入“yes”,输入即可
Counting objects: 8, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (8/8), 563 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To [email protected]:lvjianzhao/test01.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
#提示已经提交成功了。

至此,F5刷新我们github上刚刚创建的库的页面,就可以看到我们工作台目录下的那些文件了,如下:

分散型バージョン管理システム--Git詳細

第六に、ローカルのgitリポジトリにgithubのからダウンロード

私たちの上にリモートのgit githubのリポジトリ、空のライブラリに地元をリンクする方法を実証しました。

これは、既存のgithubのリポジトリ(ライブラリがコンテンツを持っている)がローカルにダウンロード方法を紹介します。

第5の動作ステップ中ため、設定されており、メールボックスが構成され、SSHキーは、第五の段落の設定を参照していない場合は、メールボックスのSSH操作キー等がので、ここでこれら二つの動作は、省略することができます。

ここではgithubのリポジトリをローカルにダウンロード第五の工程で作成されます。

次のように作成したgithubのリポジトリを探します:

分散型バージョン管理システム--Git詳細

分散型バージョン管理システム--Git詳細

[root@git /]# git clone [email protected]:lvjianzhao/test01.git  
#执行命令“git clone”,后面的路径就是我们复制的github上的ssh路径
正克隆到 'test01'...
Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known hosts.
remote: Enumerating objects: 8, done.
remote: Counting objects: 100% (8/8), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 8 (delta 0), reused 8 (delta 0), pack-reused 0
接收对象中: 100% (8/8), done.
[root@git /]# cd test01/         #克隆成功后,就会在当前目录下生成test01这个库
[root@git test01]# ls        #并且内容就是我们github上的内容
git2.txt  git3.txt  git.txt
[root@git test01]# echo "clone success..." > succed   #创建新的测试文件
[root@git test01]# ls      #如下:
git2.txt  git3.txt  git.txt  succed
[root@git test01]# git add succed      #将新创建的文件添加到暂存区
[root@git test01]# git commit -m "clone succes"     #提交到版本库
[master e62bdba] clone succes
 1 file changed, 1 insertion(+)
 create mode 100644 succed
 [root@git test01]# git push origin master    #将本地文件推送到github
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To [email protected]:lvjianzhao/test01.git
   86c5044..e62bdba  master -> master

[root@git test01]# git remote       #查看远端版本库的信息
origin

戻るgithubの上、あなたは次のように提出した新しいドキュメントを見ることができ、ページライブラリを更新します。

分散型バージョン管理システム--Git詳細

--------この記事の最後に、これまで、読んでくれてありがとう--------

おすすめ

転載: blog.51cto.com/14154700/2450150