我是通过这个来学习的。个人愚笨,琢磨了半天,终于搞通了,醉了醉了,以前一直使用svn,用git确实有点水土不服。本文以如何使用git为主来展开,不涉及太多理论。

git是分布式的版本管理。什么叫分布式呢,这个得和SVN集中式对比一下。

SVN就是把所有的版本信息都管理在一个服务器上,其他端都是客户端,checkout是获取某个版本的代码(通常是最新版本啦,也就是HEAD),update就是把本地的代码更新一下,和服务器保持同步,commit就是把本地代码提交给服务器。这些操作就如同访问一个论坛,看帖,留言一样。

而GIT是每一个机器上都有一个服务端,或许说服务端不太准确,应该说每一个机器上都是一个版本库,SVN除了服务器之外,其他的机器上都只是一份代码而已,并没有版本信息,也就是说:如果你使用SVN,有一天服务器被人偷走了,你的机器上,只保留着昨天晚上update的最新代码,你基本上无法看到以往版本的信息了,你新买个服务器,建个SVN服务器,版本号又得从1开始。而GIT不一样,即使有一天github.com这个网站倒闭了,也没有关系,你昨晚拉取(pull)到本地的数据是完整的一个版本库,你在本机就可以查看到所有的版本信息,咱有空再建一个github2.com就是了。

以上是GIT与SVN一个比较大的区别。

明白了这一点就好办了,接下来讲如何使用git。

1.安装与初始化

我喜欢使用命令行来操作。

在Windows下,登陆http://msysgit.github.io/index.html下载客户端,安装后有一个git bash的客户端,双击打开如下图所示:

在Mac下,在此下载客户端http://git-scm.com/download/mac,安装后直接使用自带的终端即可操作。

接下来要进行一个简单的初始化配置,在终端中输入

git config --global user.email [your_email_address]
git config --global user.name [your_name]

这两行的作用是对当前你使用的机器做一个标记,因为你的项目会被多个机器操作,而这有可能是你在使用,也有可能是别人在使用,那么是谁提交的代码,就需要有一个标记,比如,我有一个版本库,使用了我自己的三台电脑进行过提交,我使用git log命令来查看日志记录,会显示哪个用户做了什么操作。

做好以上的配置,就可以继续了。如果上面的配置不做,当你提交代码的时候应该会提示你。

2.你要单机使用还是用github.com?

git是一个系统,github是一个使用git来管理版本库的网站,这两者还是有区别的。

如果你要单机使用的话,也就是你把自己的电脑当做版本库,那么你需要使用git init命令。该命令会把当前目录变成一个版本库,并在里面生成一个.git文件夹。如下图所示:

如果你要联网使用,也就是说github.com上已经有一个版本库了,我们把它克隆(clone)到本地,你可以理解为checkout。这时,你需要使用git clone [url]命令。该命令执行后,会在当前目录创建一个以版本库名命名的文件夹,这个文件夹里面有.git文件夹和项目相关的文件。

(1)先在github.com上创建一个新(空)的版本库。

(2)创建完成后,会给出一个版本库的地址

(3)在命令行中进入你想要把项目放置的位置,比如你想要把项目放置到/my_projects/目录中,你只需要到这个目录即可,不需要新建test_git目录。然后在命令行中输入:

git clone https://github.com/KrossFord/test_git.git

(4)然后你就可以在你的目录中看到test_git目录。

(5)该目录中可以看到一个.git文件夹。

这样,你就把其他机器(github.com)服务器上的版本库给clone到本地了。

3.向版本库提交代码(commit)

新建的版本库空空如也什么都没有,我们以一个已经存在的Android项目为例,想其中添加代码。

(1)新建一个Android项目(你自己的其他什么项目都可以啦),把代码全部复制到test_git目录中。如下图所示:

(2)这个时候我们可以使用命令git status来查看版本库的状态,这里注意一点!git status命令查看的当前版本库的状态,何为当前呢?就是说,终端也就是命令行进入到一个有.git文件夹的文件夹里,那么git status命令就可以检查这个目录(项目)的状态,如果你在一个没有.git文件夹的文件夹git status是没有用的,因为那个文件夹并不是一个版本库。

于是你可以看到如下内容:

一下文件是未被添加到版本库中,我们需要使用git add命令来添加。

(3)忽略,对于一些项目有一些文件是不想被添加到版本库上传到服务器的,比如bin文件夹,这种情况我们可以建立一个.gitignore文件来处理,这里windows有点坑,它不能创建一个没有文件名只有扩展名的文件。

没关系,我们随便建立一个文件,然后用命令行来改,使用

mv [原文件名] .gitignore

就行了。

在.gitignore文件中输入以下内容即可:

#忽略bin文件夹本身
/bin
#忽略bin文件夹内部的内容
/bin/

关于忽略规则,请参考这里

这个时候再次输入git status来看看版本库的状态。

这个时候就没有bin文件夹了。

(4)添加文件,并提交文件。

直接使用git add .来进行添加,再次用git status查看状态。

然后使用git commit -m "message"来提交,填写提交信息是必须的。

这个时候,提交工作已经完成了,也就是说,版本库中已经有了新加入的文件,但是如果此时你去刷新github.com的页面,你会发现你的项目并没有变化,依然是空的。这是因为git是分布式的,你本机的版本库是版本库A,github.com上的版本库是版本库B,它们是不会自动关联同步的。

于是你需要最后一步操作。

(5)将数据推送到远程版本库,你需要使用git push origin master命令。

origin是远程版本库的名字,master是你当前分支的名字,具体详情请参考这里

对了,这个命令后,你需要输入github账号与密码。

提交完后,你刷新github.com的页面,就可以看到你的项目文件了。

4.更新本地版本库数据

和svn一样,如果远程的版本库先被修改了,那么我本地的版本库想要保持最新,就需要对本地版本库进行更新,这有点像svn中的update,但区别是svn中update只获取最新的代码,或者某一个特定版本的代码,而git中的update是把整个版本库与服务器端的同步。

具体操作,请执行git pull

以上,就是git的常规使用。

总结:

git init将当前目录创建为版本库,实际上就是在当前目录里面创建了一个.git文件夹。

git clone [url]将服务器端的版本库clone一个到本地来,会在当前文件夹下创建一个项目文件夹,项目文件夹中有.git文件夹。

git config --global user.email xxx

git config --global user.name xxx

以上两个命令用来设置当前机器使用git的用户信息。

git log可以查看当前版本库的日志信息,在没有.git文件夹的文件夹中无效。

使用.gitignore来忽略一些不想提交的文件。

使用git add [file]来把文件纳入版本库中,此时文件还没有提交到版本库。

git commit -m "this is a message"来进行提交,git的提交是本地操作的,可以说所有的操作都是本地的

git status来查看版本库的状态,随时都可以使用,在没有.git文件夹的文件夹中无效。

git push origin master将本地版本库的信息推送到服务器端。

git pull将服务器端的版本库信息同步到本地。

以上操作,基本可以满足个人需求了。

最后再补充一点:代理

如果你使用公司的网络来访问github的话,往往会收到一些限制,给git设置代理的方法:

git config --global http.proxy [host:port]

更新2014-11-4 19:11:37

git commit -a命令,-a 的作用是将被修改的,或者被删除的文件加入到待提交列表,commit的时候会被commit。但是新增的文件不会,也就是说,新增的文件还是要用git add命令来操作。

git add . 可以一次性add所有的新文件。

更新2015-3-20 11:50:43

git bash进入后目录总是是不在我自定义的目录上,更改git bash的初始目录(起始目录,开始目录)的办法是:

windows下右键git bash的图标,在“快捷方式”选项卡中,有“起始位置”一栏,更改即可。

更新2015-3-23 15:07:20

本地创建的仓库推送到github上的使用办法。

要做毕业设计,因此我的项目都放在www目录下,以前我的android项目都是放在我自己管理的一个mygit目录下的,eclipse直接引用就行了,但网站不行(其实也可以,服务器配置改下就行了),所以我的项目目录就存放在www目录下,我首先进入我的项目目录www/flower(一个鲜花网站……),然后在git bash中输入git init命令,即可将当前目录变成一个仓库,可以看到该目录中自动生成了一个隐藏文件夹.git。

接下来我们就要推送到github上,在github上建立一个仓库,然后会给你一个地址。

这个时候需要用git bash工具,给当前的仓库加一个远端地址。命令如下:

git remote add remote_name https://github.com/xxxxxx/xxxxxx.git

remote_name可以自己随便起

后面跟着的地址,就是github给你的仓库地址。

添加完毕之后,输入git remote -v可以查看到remote是否添加上了。

接下来就是关键性的一步

git push remote_name master

这样就可以将本地的代码推送到github了。

直到学习了这一步,我才知道git push remote_name local_name

remote_name是github上的名字,

local_name是本地的名字。

之前的用法都是git push origin master,也就意味着,origin是github上的,master是本地的,这个参数的顺序还真是符合英语的语法顺序呢……

github使用指南(2015年3月23日更新了本地创建仓库再推送到remote仓库的使用方法)的更多相关文章

  1. 如何将git本地创建的项目推送到github仓库

    除了集中式的版本控制系统CVS和SVN外,还有目前世界上最先进的分布式版本控制系统Git,它的创始人是创建了linux的大神 - linus.GitHub网站与2008年开始服役,为开源项目免费提供G ...

  2. 路冉的JavaScript学习笔记-2015年1月23日

    1.JavaScript的数据类型 A.原始类型:包含数值.字符串.布尔值.空值(null)和未定义值(undefined). Js原始类型均为不可改变类型.对不可变类型调用任何自带方法都不会改变原始 ...

  3. git 现在本地创建仓库 再 推送到 远程 github 仓库中

    今天,需要再本地使用git管理代码,但是当代码创建好的时候,想发布到github上面的私有仓库中,但是没有提前创建远端仓库,所以需要把本地git仓库推送到远端另外一个仓库了,下面进行简要记录,刚刚经过 ...

  4. 初识Less(2015年05月23日)

    因为最近在研究Bootstrap,然后才了解到Less,听说Less很强大,又听说Bootstrap+Less会更搭,所以就决定也顺带了解下Less的相关知识. come  on...... 一.简介 ...

  5. 2015年10月23日JS笔记

    ECMAScript标准:JavaScript核心语法 微软:Jscript ECMAScript标准:一纸空文 JavaScript和JScritp都号称完全实现了 ECMAScript标准 W3C ...

  6. Palindrome Number 2015年6月23日

    题目: 判断一个数是不是回文数 Determine whether an integer is a palindrome. Do this without extra space. 思路:借助上一道求 ...

  7. Reverse Integer 2015年6月23日

    题目: Reverse digits of an integer. Example1: x = , return Example2: x = -, return - 思路:递归 解答: / test ...

  8. 让Vs2013 完美支持EF6.1 Code First with Oracle 2015年12月24日更新

    本文是对下文的补充,切勿以为我是全盘复制哦 连接: http://www.cnblogs.com/wlflovenet/p/4187455.html Normal 0 7.8 磅 0 2 false ...

  9. 如何把已有的本地git仓库,推送到远程新的仓库(github private)并进行远程开发;

    最近因为疫情,在家干活,连接不上之前的gitlab 服务器:所以不得把现有的代码迁移到github 的私有仓库来进行开发:下面简要记录迁移的过程: 首先,确保你已经配置好本地访问远程私有仓库的所有权限 ...

随机推荐

  1. go标准库的学习-bufio

    参考https://studygolang.com/pkgdoc 导入方式: import "bufio" bufio包实现了有缓冲的I/O.它包装一个io.Reader或io.W ...

  2. logstash同步mysql数据到mysql(问题一)

    问题 通过logstash同步数据时 字段类型为tinyint时 通过过去 0变成了false  1变为了true 时间类型 变为 2018-10-16T14:58:02.871Z 分析 开始尝试通过 ...

  3. leetcode 199. Binary Tree Right Side View 、leetcode 116. Populating Next Right Pointers in Each Node 、117. Populating Next Right Pointers in Each Node II

    leetcode 199. Binary Tree Right Side View 这个题实际上就是把每一行最右侧的树打印出来,所以实际上还是一个层次遍历. 依旧利用之前层次遍历的代码,每次大的循环存 ...

  4. ESP32 I2S

    I2S支持DMA; I2S可以直接利用DAC来输出模拟信号 (GPIO 25 & GPIO 26): 高精度时钟使能参数:   .use_apll = true ESP32配置外设一般都是配置 ...

  5. highcharts中把X轴的名字竖着显示

    Highcharts.chart('container', { chart: { type: 'column' }, title: { text: 'Auto rotation limit' }, s ...

  6. curl命令行

    curl命令行--强大的工具.通过各种参数,支持各种方式. 写几个常用的命令: 请求到的网站html curl http://www.baidu.com 比如想在命令行上请求一个接口,post过去几个 ...

  7. VC++编写简单串口上位机程序

    VC++编写简单串口上位机程序   转载: http://blog.sina.com.cn/s/articlelist_1809084904_0_1.html VC++编写简单串口上位机程序 串口通信 ...

  8. C# 程序默认使用管理员权限(转载)

    1.从A程序启动B程序,当B程序需要管理员权限的时候代码如下 A程序里面启动B程序的代码如下 ProcessStartInfo startInfo = new ProcessStartInfo(); ...

  9. LOJ2537 PKUWC2018 Minimax 树形DP、线段树合并

    传送门 题意:自己去看 首先可以知道,每一个点都有几率被选到,所以$i$与$V_i$的关系是确定了的. 所以我们只需要考虑每一个值的取到的概率. 很容易设计出一个$DP$:设$f_{i,j}$为在第$ ...

  10. EF性能优化-有人说EF性能低,我想说:EF确实不如ADO.NET

    十年河东,十年河西,莫欺少年穷. EF就如同那个少年,ADO.NET则是一位壮年.毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET. 也就是说:你所写的LINQ查询,最后还是要转 ...