Way to Git
最近在学习Git,我先后在CentOS6.4, Ubuntu12.04, Windows7上安装Git,遇到的问题比较多的是在CentOS上的安装,Ubuntu和Windows7上的安装相对比较简单,只需按照Git官网上的的tutorial操作即可,本文就Git在CentOS6.4上的安装进行说明,并列举了基本的Git操作。
@1:Install & Configure
&1:Install
#If you’re on Fedora, you can use yum:
$ yum install git-core
#Or if you’re on a Debian-based distribution like Ubuntu, try apt-get:
$ apt-get install git
上面的这种方式根据所使用的系统的版本号不同,可能安装的并不是最新版的Git【例如我的系统是CentOS6.4,使用yum install git得到的Git版本是1.7.1,所以在下面的commit环节遇到了麻烦的问题,网上提示要安装1.7.10以上的版本】,所以可以采用下面的方法:
首先到https://github.com/git/git上,下载最新版本的git源文件。在进行安装前,需要先安装: expat,curl, zlib, 和 openssl;除了expat 外,其它的可能在你的机器上都安装了。安装expat:
$ yum install expat-devel
然后就可以安装了:
$ make prefix=/usr all # 以当前用户权限运行
$ make prefix=/usr install # 以root权限运行
&2:Configure(Just for once.只需进行一次配置即可)
$ git config --global user.name "Your Name Here"
# Sets the default name for git to use when you commit
$ git config --global user.email "your_email@example.com"
# Sets the default email for git to use when you commit
$ git config --global push.default simple
# set the push.default
其中配置git config --global push.default simple的原因是,Git2.0版本中将push的默认值改成了'simple'(Git1.x版本中,该值的默认值为'matching'),matching 意味着如果在进行push时没有指定branch,则默认push所有的本地branch到远程Repo;simple意味着如果在进行push时没有指定branch,则默认只push当前的branch。
@2:Create A Repo
&1:Create A Repo on Github,e.g. Hello_World Repo.
&2:Create a README for your repository
【README虽然不是必需的,但最好还是要有README文件的,该文件可以用来对Project进行简要的说明:如何进行安装,必要的操作说明以及作者的联系方式等】
*1:Create the README file
$ mkdir ~/Hello-World
$ cd ~/Hello-World
$ git init
# Sets up the necessary Git files.Initialized empty Git repository in Hello-World/.git/
$ touch README
其中,git init是告诉Git当前目录是我们需要跟踪的项目。
*2:Commit your README
$ git add README
# Stages your README file, adding it to the list of files to be committed
$ git commit -m 'first commit'
# Commits your files, adding the message "first commit"
如果要stage当前目录(.)下的所有的文件和文件夹(以及其子文件夹),可以使用下面的命令:
$ git add .
如果你有需要检查你现在的已加载(staged)和未加载(unstaged)文件的状态、提交等,你可以询问git的状态:
$ git status
*3:Push your commit
So far, everything you've done has been in your local repository, meaning you still haven't done anything on GitHub yet. To connect your local repository to your GitHub account, you will need to set a remote for your repository and push your commits to it.
$ git remote add origin https://github.com/username/Hello-World.git
# Creates a remote named "origin" pointing at your GitHub repository. We can use any other name instead of "orgion"
$ git push origin master
# Sends your commits in the "master" branch to GitHub
@3: Update
如果想从远程代码库上取得它最新的版本,切换(cd)到项目的根目录下,然后执行:
$ git pull origin master
@4:Fork A Repo
&1:Click the "Fork" button in the Github.com repository to fork the repository. e.g."Spoon-Knife"
&2:After the former step,you've successfully forked the repository, but it only exists on GitHub. To be able to work on the project,you will need to clone it to your local machine.
$ git clone https://github.com/username/Spoon-Knife.git
# Clones your fork of the repository into the current directory.
&3:Configure remotes
When a repository is cloned, it has a default remote called origin that points to your fork on GitHub, not the original repository it was forked from. To keep track of the original repository, you need to add another remote named upstream:
$ cd Spoon-Knife
$ git remote add upstream https://github.com/octocat/Spoon-Knife.git
# Assigns the original repository to a remote called "upstream"
$ git fetch upstream
# Pulls in changes not present in your local repository, without modifying your files
&4:Pull in upstream changes
If the original repository gets updated, you can add those updates to your fork:
$ git fetch upstream
# Fetches any new changes from the original repository
$ git merge upstream/master
# Merges any changes fetched into your working files
&5:Delete your fork
To delete a fork, just follow the same steps as you would to delete a regular repository:
[Select "Settings" from the repository action bar]->[Click Delete this repository in the Danger Zone™ area]->[Read the warnings]->[Enter the name of the repository you want to delete]->[Click I understand the consequences, delete this repository]
NOTE:Deleting a private repository also deletes all of its forks. Deleting a public repository will not.
@5:About Branches
&1:建立分支
建立分支是指创建代码的独立版本,独立于你的master分支(主干分支)。默认地,每次你提交到Git的文件都会被储存到master分支。
当我们想要向项目里添加一个功能,但我们希望能够回滚到现在版本,以防出现差错,或者我们可以随时决定要放弃这个功能,我们就可以通过创建分支来实现这些。
创建并同时切换到新建的分支:
$ git checkout -b new_feature
或者
先创建一个分支然后手动切换:
$ git branch new_feature
$ git checkout new_feature
要查看当前项目下所有的分支:
$ git branch
通过创建分支,我们可以在项目上无所顾忌地做任何想做的,因为任何时候,我们都可以回到创建分支前的状态。并且,我们同时可以有多个分支,甚至可以在一个分支上再创建一个分支。
&2:合并分支
当我们对在分支(比如前面提到的new_feature分支)中做的新功能满意了的时候,我们想要把它加到master分支上。此时我们可以首先切换到new_feature分支,然后进行stage并且commit:
$ git add .
$ git commit -m "adds my new feature"
然后切换到master分支:
$ git checkout master
像这样进行合并:
$ git merge new_feature
此时,你的master分支和你的新功能分支会变成一样的了。
&3:删除分支
$ git branch -d new_feature
若修改已经合并了,则它只会删除分支。若分支没有合并,则会得到一个错误信息。可以通过下面的方法来删除一个未合并的分支(通常你不想保留的修改):
$ git branch -D new_feature
你需要发送一样的命令附带一个大写D。意思是“强制删除分支,无论如何我不想要它了。”
&4:回滚
在某些时候,我们可能想要回到之前的代码版本。查看所有的已完成的提交:
$ git log
这会输出提交的历史记录:
commit ca82a6dff817ec66f44342007202690a93763949Author: your_username your_email@domain.comDate: Mon Nov 4 12:52:11 2013 -0700 changes the frontpage layout
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author: your_username your_email@domain.comDate: Mon Nov 4 11:40:33 2013 -0700 adds my new feature
commit a11bef06a3f659402fe7563abf99ad00de2209e6Author: your_username your_email@domain.comDate: Mon Nov 4 10:37:28 2013 -0700 initial commit
假如此时想回到“adds my new feature”这个提交,简单地用提交的ID做checkout(通常只用到ID开头的9个字符)
$ git checkout 085bb3bcb
也可以签出到一个新的分支,像这样:
$ git checkout -b my_previous_version 085bb3bcb
只是别太疯狂了!分支越复杂,就越难确定你真正在做什么。
&5:分支的Demo:
lxw@ubuntu:~/Documents/ShellScript/DealScript$ git branch
* master
version1
lxw@ubuntu:~/Documents/ShellScript/DealScript$ ls
apnic.txt awkDealScript.sh newAWKDealScript.sh output README.md
lxw@ubuntu:~/Documents/ShellScript/DealScript$ git checkout version1
Switched to branch 'version1'
lxw@ubuntu:~/Documents/ShellScript/DealScript$ ls
apnic.txt awkDealScript.sh README.md
lxw@ubuntu:~/Documents/ShellScript/DealScript$ git branch
master
* version1
lxw@ubuntu:~/Documents/ShellScript/DealScript$
分支不同所处的环境不同.
@6:其他命令:
#1: git remote/git remote -v
#2: git remote rm remote_name
#3: git ls-files
#4: git 删除远程分支: git push --delete origin branchName
#5: git 查看所有分支(本地分支+远程分支): git branch -a
#6: 使用git 部署代码,git branch -a 里面列出的很多远程的分支,其实都是已经被删除了的。可在git pull,他们仍旧是存在,如何删除这样的缓存?
git remote prune origin
or
git fetch -p
References:
Git Tutorial:http://www.ralfebert.de/tutorials/git/
Git 2.0 changes push default to 'simple': http://blog.nicoschuele.com/posts/git-2-0-changes-push-default-to-simple
15分钟学会使用Git和远程代码库: http://blog.jobbole.com/53573/
Way to Git的更多相关文章
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
- [版本控制之道] Git 常用的命令总结(欢迎收藏备用)
坚持每天学习,坚持每天复习,技术永远学不完,自己永远要前进 总结日常开发生产中常用的Git版本控制命令 ------------------------------main-------------- ...
- 【解决方案】Myeclipse 10 安装 GIT 插件 集成 步骤 图解
工程开发中,往往要使用到集成GIT ,那么下面说说插件安装步骤 PS:以Myeclipse 10 为例,讲解集成安装步骤. ----------------------main------------ ...
- git 命令
切换仓库地址: git remote set-url origin xxx.git切换分支:git checkout name撤销修改:git checkout -- file删除文件:git rm ...
- git亲测命令
一.Git新建本地分支与远程分支关联问题 git checkout -b branch_name origin/branch_name 或者 git branch --set-upstream bra ...
随机推荐
- gcc -M -MM -MQ -MF -MT -MD
静态模式规则对一个较大工程的管理非常有用.它可以对整个工程的同一类文件的重建规则进行一次定义,而实现对整个工程中此类文件指定相同的重建规则.比如,可以用来描述整个工程中所有的.o 文件的依赖规则和编译 ...
- shell脚本之read工具
#!/bin/bash # -*- coding: utf-8 -*- # echo -n "please input your name: " read name echo &q ...
- Yarn源码分析之参数mapreduce.job.reduce.slowstart.completedmaps介绍
mapreduce.job.reduce.slowstart.completedmaps是MapReduce编程模型中的一个参数,这个参数的含义是,当Map Task完成的比例达到该值后才会为Redu ...
- Android-Dialog风格Activity开发
1.设置窗口风格 : ①在Manifest中设置主题属性android:theme="@android:style/Theme.Dialog",或者 Theme.Holo.Dial ...
- 15:开发Rsync服务启动脚本案例
[root@m01 ~]# rsn_count="ps -ef|grep 'rsync --d[a]emon'|wc -l" [root@m01 ~]# echo ${rsn_co ...
- AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的编程语言,而是一种使用现有标准的新方法. AJAX 最大的 ...
- sqoop1.4.4从oracle导数据到hive中
sqoop从oracle定时增量导入数据到hive 感谢: http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.htmlhttp://f.dataguru. ...
- Android-风格和主题
Android-风格和主题 一 Style和主题Theme的差别 1.Theme是针对窗口级别的,改变窗口样式 2.Style是针对窗口元素级别的.改变指定控件或者Layout的样式 二 使用Styl ...
- 框架应用:Mybatis - 开发详述
ORM框架 在实际开发中,工程中本质的任务是从数据库中获取数据,然后对数据进行操作,又或者写入数据.开发时语言是大多是面向对象的工程语言,这个时候就必须进行工程语言和数据库连接语言的转换,也就是所谓的 ...
- Android开发:拖拽
google官网的training和API两个地方都提到了拖拽的实现,两种方法不太一样. 方法一 training(https://developer.android.com/training/ges ...