Git环境搭建与基本使用方法 (转自http://blog.csdn.net/fireelement/article/details/9618363)

简介:  以前公司有的项目也用这个东东,但我的项目中还是始终使用svn,华为以前用的是VSS,不过后来也开始推别的了,如CVS(2006年,SVN貌似还不太火)。 Git这个东东不必说太多,想来大家也都听说过。最早开始是由Ruby程序员们发起的。记得2008年接触Ruby和Rails的时候还没有这个东东,代码在线管理还是百花齐放。Ruby是日本的家伙搞出来的,日本有个代码托管网站叫he

以前公司有的项目也用这个东东,但我的项目中还是始终使用svn,华为以前用的是VSS,不过后来也开始推别的了,如CVS(2006年,SVN貌似还不太火)。

Git这个东东不必说太多,想来大家也都听说过。最早开始是由Ruby程序员们发起的。记得2008年接触Ruby和Rails的时候还没有这个东东,代码在线管理还是百花齐放。Ruby是日本的家伙搞出来的,日本有个代码托管网站叫heroku,当时用这个的人比较多,现在这个网站还能打开,网址是www.heroku.com。只不过后来硅谷玩ruby的兄弟们把Git搞出来了,还主动把Rails框架也搬上去了,所以自然整个Ruby社区跟着就转用Git了。

再说说为什么非得搞Git出来,还得说其源头Ruby。Ruby和Rails用过的人都知道,这种语言适合一两个人快速开发一个web应用,我曾经用rails七天之内写过一个网站。但是rails团队开发是个问题,如果用svn这种东西,很容易就搞出冲突出来。而svn大家都知道,一旦有什么冲突文件也挺麻烦的。所以,git就应运而生了,git的思想就是每个人都在自己本地的branch上进行工作,在最终提交前再合主干合并,然后再提交。这样做有几点好处:

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

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

3、速度快、灵活

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

5、离线工作

下面是一张Git工作模式的图,有利于大家对Git的工作方式进行理解:


过上面这个模式的复杂之处在于主开发者很累,他要审核所有的补丁并push到公共服务器上,所以像我们这种小团队还是由开发者自己merge并push到服务器上即可。

闲话少说,下面就正式开始说怎么玩Git。

安装

先说windows版,从这个网站下:https://code.google.com/p/msysgit/downloads/list。安装过程非常简单,一路默认就可以了。

再说linux版的安装,我用的是ubuntu,ubuntu可以直接装:

  1. apt-get install git  

不过这么装完有一个隐患,就是提交到GitHub的时候,会报一个错:

  1. Error: The requested URL returned error: 403 while accessing    
  2. # https://github.com/user/repo.git/info/refs    
  3. # fatal: HTTP request failed   

这是因为这么安装的git版本是1.7.4,而官方说明要1.7.10后才能正常提交,所以我们还是把Git的源加上吧:

  1. sudo apt-add-repository ppa:git-core/ppa   
  2. sudo apt-get update   

然后再进行安装,或者升级:

  1. apt-get dist-upgrade  

设置Git

这一步windows和linux都是一样的,稍微不同的是windows下在Git GUI中操作,而linux下直接在shell中操作就行。

首先我们得创建一个ssh key,这个key在github.com中个人设置中是要用到的,创建方法如下:

  1. ssh-keygen -t rsa -C "caoxuezhu@cyou-inc.com"  
然后跟据提示输入密码即可创建,如果没有改默认路径的话,生成的文件在~/.ssh/id_rsa.pub这个文件中。

注册GitHub

要想玩转Git,就得有个GitHub的账号,因为基于Git的代码都是在这个网站上进行托管的(www.github.com)。先注册一个账号,这自然不用说了,跟注册别的网站一样,关键是注册完的设置,先设置刚才生成的ssh key,步骤如下:


图蓝框中填入刚刚生成的ssh key,注意把key文件的全文一字不差的填进去,否则Add不成功。Title就随便起一个名字就可以


创建GitHub工程

下面我们就开始用GitHub托管项目了,首先得先创建一个项目,点击这里:


后填上一个合适的项目名和描述(选填)就可以了


一点需要注意的是,下面这个设置如果不设的话,其他项目成员是没有权限提交代码的:



输入框中填入其他项目成员注册时写的Username


设置成功后是这样的:


Git使用

前面说了这么多,终于到了怎么使用Git进行代码管理的部分了,这理我先介绍命令行的方式,当然window下也有窗口工具,叫TortoiseGit。跟TortoiseSVN界面看着差不多,这个后面有机会再写blog介绍吧。

首先做为项目的master,一开始要传代码上去,具体步骤如下:

首先在本地创建一个跟项目同名的文件夹,这个在哪个目录下创建都行:

  1. mkdir HelloWorld2  

然后初始化工程:

  1. git init  

然后再随便添加一个文件:

  1. touch README.md  

把文件加入git,这里用“.”表示加入所有文件,当然也可以使用确切的文件名:

  1. git add .  
然后提交到本地库中,如果不加-m参数的话,会出来对话界面让你输入commit,所以还是直接加上了方便:

  1. $ git commit -m "first commit"  
  2. [master (root-commit) 9a39880] first commit  
  3.  1 file changed, 0 insertions(+), 0 deletions(-)  
  4.  create mode 100644 README.md  

连接GitHub:

  1. git remote add origin https://github.com/caoxuezhu/HelloWorld2.git  

将代码发送到GitHub,这一步输入在注册GitHub时填的邮箱和密码:

  1. $ git push -u origin master  
  2. Username for 'https://github.com': caoxuezhu@cyou-inc.com  
  3. Password for 'https://caoxuezhu@cyou-inc.com@github.com':  
  4. Counting objects: 3, done.  
  5. Writing objects: 100% (3/3), 215 bytes | 0 bytes/s, done.  
  6. Total 3 (delta 0), reused 0 (delta 0)  
  7. To https://github.com/caoxuezhu/HelloWorld2.git  
  8.  * [new branch]      master -> master  
  9. Branch master set up to track remote branch master from origin.  

代码上传成功,GitHub上也看到了刚刚提交的code:


下面的部分是做为项目其他开发者,应该怎么进行工作。

首先先把项目下载下来:

  1. cxz@ubuntu:/data/work/tool/version control tool/git$ git clone https://github.com/caoxuezhu/HelloWorld2.git  
  2. Cloning into 'HelloWorld2'...  
  3. remote: Counting objects: 3, done.  
  4. remote: Total 3 (delta 0), reused 3 (delta 0)  
  5. Unpacking objects: 100% (3/3), done.  
  6. Checking connectivity... done  

这时可以看到项目已经下载下来了:

  1. cxz@ubuntu:/data/work/tool/version control tool/git$ ls  
  2. HelloWorld  HelloWorld1  HelloWorld2  
  3. cxz@ubuntu:/data/work/tool/version control tool/git$ cd HelloWorld2/  
  4. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ ls  
  5. README.md  

如果不是首次下载项目,在开始工作之前,最好先更新下代码:

  1. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git pull origin master  
  2. From https://github.com/caoxuezhu/HelloWorld2  
  3.  * branch            master     -> FETCH_HEAD  
  4. Already up-to-date.  

创建并切换到自己的本地分支上:

  1. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git branch FireElement  
  2. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout FireElement  
  3. Switched to branch 'FireElement'  

开始自己的工作,这里我进行了创建和修改文件的操作:

  1. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ touch file_1  
  2. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ vim README.md   

在本地分支上提交这些操作:

  1. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git add .  
  2. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git commit -m "my first modify"  
  3. [FireElement f9acb84] my first modify  
  4.  2 files changed, 1 insertion(+)  
  5.  create mode 100644 file_1  

切换到主干上并把改动merge过来:

  1. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git checkout master  
  2. Switched to branch 'master'  
  3. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git merge FireElement  
  4. Updating 9a39880..f9acb84  
  5. Fast-forward  
  6.  README.md | 1 +  
  7.  file_1    | 0  
  8.  2 files changed, 1 insertion(+)  
  9.  create mode 100644 file_1  

提交修改到服务器,这里提示时输入注册github网站时的用户名和密码:

  1. cxz@ubuntu:/data/work/tool/version control tool/git/HelloWorld2$ git push origin master  
  2. Username for 'https://github.com': pire_cao@163.com  
  3. Password for 'https://pire_cao@163.com@github.com':   
  4. Counting objects: 5, done.  
  5. Delta compression using up to 2 threads.  
  6. Compressing objects: 100% (2/2), done.  
  7. Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.  
  8. Total 3 (delta 0), reused 0 (delta 0)  
  9. To https://github.com/caoxuezhu/HelloWorld2.git  
  10.    9a39880..f9acb84  master -> master  

提交成功后在网站上也可以看到刚刚新增的文件和对已有文件的修改:


目录
相关文章
|
3月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
4月前
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
167 26
|
5月前
|
中间件 Go
Golang | Gin:net/http与Gin启动web服务的简单比较
总的来说,`net/http`和 `Gin`都是优秀的库,它们各有优缺点。你应该根据你的需求和经验来选择最适合你的工具。希望这个比较可以帮助你做出决策。
197 35
|
9月前
|
Ubuntu Linux Shell
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
4126 69
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
|
9月前
|
JSON 数据格式
.net HTTP请求类封装
`HttpRequestHelper` 是一个用于简化 HTTP 请求的辅助类,支持发送 GET 和 POST 请求。它使用 `HttpClient` 发起请求,并通过 `Newtonsoft.Json` 处理 JSON 数据。示例展示了如何使用该类发送请求并处理响应。注意事项包括:简单的错误处理、需安装 `Newtonsoft.Json` 依赖,以及建议重用 `HttpClient` 实例以优化性能。
225 2
|
数据采集 JSON API
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
本文探讨了在.NET环境下,如何通过异步方法和HTTP请求提高Web爬虫的响应速度和数据抓取效率。介绍了使用HttpClient结合async和await关键字实现异步HTTP请求,避免阻塞主线程,并通过设置代理IP、user-agent和cookie来优化爬虫性能。提供了代码示例,演示了如何集成这些技术以绕过目标网站的反爬机制,实现高效的数据抓取。最后,通过实例展示了如何应用这些技术获取API的JSON数据,强调了这些方法在提升爬虫性能和可靠性方面的重要性。
241 1
异步方法与HTTP请求:.NET中提高响应速度的实用技巧
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
这篇文章是关于计算机组成原理的王道考研学习笔记,主要介绍了半导体存储器RAM和ROM的相关知识。
学习计算机组成原理(王道考研)------第十一天https://zhengyz.blog.csdn.net/article/details/121706379?spm=1001.2014.3001.5502
|
11月前
|
API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
使用`System.Net.WebClient`类发送HTTP请求来调用阿里云短信API
178 0
|
数据采集 API 开发者
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
在.NET 8中,通过`ConfigurePrimaryHttpMessageHandler`方法,开发者能更精细地控制HTTP请求,这对于构建高效爬虫尤为重要。此特性支持定制代理IP、管理Cookie与User-Agent,结合多线程技术,有效应对网络限制及提高数据采集效率。示例代码展示了如何设置代理服务器、模拟用户行为及并发请求,从而在遵守网站规则的同时,实现快速稳定的数据抓取。
214 0
.NET 8新特性:使用ConfigurePrimaryHttpMessageHandler定制HTTP请求
|
数据采集 开发框架 .NET
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求
在现代Web开发中,高效可靠的HTTP请求对应用性能至关重要。ASP.NET Core提供的`HttpClient`是进行这类请求的强大工具。本文探讨其最佳实践,包括全局复用`HttpClient`实例以避免性能问题,通过依赖注入配置预设头部信息;使用代理IP以防IP被限制;设置合理的`User-Agent`和`Cookie`来模拟真实用户行为,提高请求成功率。通过这些策略,可显著增强爬虫或应用的稳定性和效率。
263 0
HttpClient在ASP.NET Core中的最佳实践:实现高效的HTTP请求