git入门 简单使用(1)创建仓库 上传文件

1、什么是git?

Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

2、git的特点?

从一般开发者角度:

1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。

2、在自己的机器上根据不同的开发目的,创建分支,修改代码。

3、在单机上自己创建的分支上提交代码。

4、在单机上合并分支。

5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。

6、生成补丁(patch),把补丁发送给主开发者。

7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。

8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

从主开发者角度:

扫描二维码关注公众号,回复: 5534274 查看本文章

1、查看邮件或者通过其它方式查看一般开发者的提交状态。

2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。

3、向公共服务器提交结果,然后通知所有开发人员。

3、git的优缺点

Git的优点:

1、适合分布式开发,强调个体;

2、公共的服务器压力和数量都不会太大;

3、速度快, 成熟的架构,开发灵活;

4、任意两个开发者之间可以很容易的解决冲突;

5、离线工作,管理代码成本低,不需要依赖服务器;

6、部署方便。基本上下个命令就可以用;

7、良好的分支机制,可以让主干代码保持干净。

Git的缺点:

1、资料少,学习成本比较大,学习周期比较长,要求人员素质比较高;

2、不符合常规思维;

3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

4、git仓库的创建

$ git init; 创建一个版本库
这里就创建了一个空的版本库啦
注意:这里只是命令的展示,其实你可以在你任何一下目录下创建,命令是:

1 、$mkdir gittutorcn

2、$cd gittutorcn/

3、$git init

这时系统会输出:

Initialized empty Git repository in/[yourpath]/.git或
(Initialized empty Git repository in /Users/1a/gittutorcn/.git/
)

这样,一个空的版本库就创建好了,并在当前目录中创建一个叫 .git 的子目录。
你可以用 ls -a 查看一下,并请注意其中的三项内容:

  • 一个叫 HEAD 的文件,我们现在来查看一下它的内容
    输入命令:cat .git/HEAD
    查看head的内容
    我们可以看到,HEAD 文件中的内容其实只是包含了一个索引信息,并且,这个索引将总是指向你的项目中的当前开发分支。

  • 一个叫 objects 的子目录,它包含了你的项目中的所有对象,我们不必直接地了解到这些对象内容,我们应该关心是存放在这些对象中的项目的数据。
    存储对象的目录,本地仓库,git中对象分为三种:commit对象,tree对象(多叉树),blob对象;
    关于 git 对象的分类,以及 git 对象数据库的说明,请参看 [Discussion]

  • 一个叫 refs 的子目录,它用来保存指向对象的索引。
    具体地说,子目录 refs 包含着两个子目录叫 heads 和 tags,就像他们的名字所表达的意味一样:他们存放了不同的开发分支的头的索引, 或者是你用来标定版本的标签的索引。

请注意:master 是默认的分支,这也是为什么 .git/HEAD 创建的时候就指向 master 的原因,尽管目前它其实并不存在。 git 将假设你会在 master 上开始并展开你以后的工作,除非你自己创建你自己的分支。

另外,这只是一个约定俗成的习惯而已,实际上你可以将你的工作分支叫任何名字,而不必在版本库中一定要有一个叫 master 的分支,尽管很多 git 工具都认为 master 分支是存在的。

现在已经创建好了一个 git 版本库,但是它是空的,还不能做任何事情,下一步就是怎么向版本库植入数据了。

5、植入数据

增加内容

$ git add

为了简明起见,我们创建两个文件夹作为练习:

$ echo"Helloworld">hello
$ echo"SnakeZero">snake

我们再用 git add 命令将这两个文件加入到版本库文件索引当中:

$ git add hello snake

注意,这里使用不同的终端窗口会影响操作,如果你出现了这种错误:

上传文件出现错误时
不要慌,因为windows中的换行符为CRLF,而Linux下的换行符为LF(使用Git命令行Git Bash,实际上就是相当于linux环境),所以在执行git add xxx.xx操作时,会出现这个错误提示!

那么怎么解决呢?
<1>删除.git 【rm -rf .git】

<2>禁用自动转换,即将设置:git config --global core.autocrlf false

再重新初始化,并执行添加add操作:

<3>【git init】

<4> 【git add xxx.xx】
 解决问题
是不是很神奇呢?好啦,我们已经将hello和snake文件夹添加到版本库文件索引当中啦。

git add 实际上是个脚本命令,它是对 git 内核命令 git update-index 的调用。因此上面的命令和下面的命令其实是等价的:

$ git update-index --add hello snake

如果你要将某个文件从 git 的目录跟踪系统中清除出去,同样可以用 git update-index 命令。例如:

$git update-index --force-remove foo.c

git add 可以将某个目录下的所有内容全都纳入内容跟踪之下,例如: git add ./path/to/your/wanted 。但是在这样做之前,应该注意先将一些我们不希望跟踪的文件清理掉,例如,gcc 编译出来的 .o 文件,vim 的交换文件 ..swp 之类。

应该建立一个清晰的概念就是,git add 和 git update-index 只是刷新了 git 的跟踪信息,hello 和 snake 这两个文件中的内容并没有提交到 git 的内容跟踪范畴之内。
普通用户总是应该使用 git add, 而不要使用上面提到的 update-index内部命令。

添加所有未跟踪文件用 git add -A, 添加所有未跟踪文件并且提交用 git commit -a。(注意大小写)
从当前跟踪文件中删除用 git reset HEAD 。事实上也就是用当前 HEAD(commited) 中的内容替换掉 index(staging) 的内容。

提交内容

提交内容到版本库:

$ git commit

既然我们刷新了 Git 的跟踪信息,现在我们看看版本库的状态:

$ git status

我们能看到:
git状态提示
提示信息告诉我们版本库中加入了两个新的文件,并且 git 提示我们提交这些文件,我们可以通过 git commit 命令来提交:

$git commit -m "Initial commit of git tutor reposistory"

引号里面内容是你的备注,可以随便写,但是最好便于识别,不然以后你就不知道自己做了什么了,也不好做版本回退。

如果你输入的时候提示让你输入邮箱和名字,输入就行了,比如:

上传
查看当前的工作:

$git diff

git diff 命令将比较当前的工作目录和版本库数据库中的差异。现在我们编辑一些文件来体验一下 git 的跟踪功能。

$echo'这段是后来加的'>snake

我们再来比较一下,当前的工作目录和版本库中的数据的差别。

$ git diff

差异将以典型的 patch 方式表示出来:
在这里插入图片描述
此时,我们可以再次使用组合命令 git add 和 git commit 将我们的工作提交到版本库中。

$ git add snake
$ git commit -m "new day for git"

实际上,如果要提交的文件都是已经纳入 git 版本库的文件,那么不必为这些文件都应用 git add 命令之后再进行提交,下面的命令更简捷并且和上面的命令是等价的。

$git commit -a -m"new day for git"

修改

好了,更加的具体用法可以百度大神们的操作,后续会持续更新,么么哒。

猜你喜欢

转载自blog.csdn.net/weixin_44296489/article/details/88550338