http://blog.csdn.net/pipisorry/article/details/44588351
$ git config --global user.name "***"
$ git config --global user.email "***@126.com"
在本地的某个要使用git版本控制的目录下
git init
添加exclude
git add .
git commit -m "first commit"
ubuntu 14.04中安装最新版git
$sudo add-apt-repository ppa:git-core/ppa #添加最新源,不然总是安装git 1.9.1
$sudo apt-get update #添加更新源后记得update一下,否则添加后也没用
$sudo apt-get install git #安装最新版的git
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样。Cygwin的安装和配置都比较复杂,就不建议你折腾了。不过,有高人已经把模拟环境和Git都打包好了,名叫msysgit,只需要下载一个单独的exe安装程序。
msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”!
Note: windows下安装git后,如果将安装目录D:\Git\bin加入到path路径中,这样就可以在cmd(而不是git命令行mingw32)中使用linux命令如ls了。
快速启动Git并自动切换到指定的文文件夹:命令行工具Git Bash还集成到了Windows的资源管理器中,在文件夹上右键,可以点击Git Bash Here和Git GUI Here快速启动Git并自动切换到指定的文件夹。
$ git config --global user.name "***"
$ git config --global user.email "***@126.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。(注册过的)
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
git config --list
皮皮Blog
git init
命令把某个目录(比如我的是E:\mine\pythonworkspace)变成Git可以管理的仓库
GitBash中输入:
$ cd 'E:\mine\pythonworkspace'
$ git init
当前目录下多了一个.git
的目录,这个目录是Git来跟踪管理版本库的
Note:git很干净:git不会像svn一样在每个目录下面都建立一个.svn目录,而只是在代码根目录下建立一个.git目录。所以相应的,当你执行git status的时候,显示出来的是整个工程的代码修改,而不是像svn一样显示当前目录下的修改。git只建立一个.git目录的好处是,除了根目录下你需要注意这里比原先多了一个文件夹外,你可以很放心地认为“代码就像它看起来的那样”,你把它copy到任意一个地方都可以。而svn则不行,svn的代码目录是不能够拷贝到其他svn代码库中的,因为svn的索引会冲突。
git提交代码文件时怎么过滤掉某个文件夹,不提交Git工作目录中某些文件。在git add文件之前,有些文件(比如数据文件,>100m就不能push到远程;比如.pyc文件;比如编译过程中生成的 .o 文件)是我们并不想加入也无需被添加到 Git 管理中,同时也不希望他出现在未跟踪列表中。
lz提示一点,相当重要:.gitignore 文件只能作用于 Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)。.gitignore文件只是ignore没有被staged(cached)文件,对于已经被staged文件,加入ignore文件时一定要先从staged移除。
配置语法
1)以“/”开头表示目录;
2)以“?”通配单个字符
3)以“*”通配多个字符;
4)以方括号“[]”包含单个字符的匹配列表;
5)以叹号“!”跟踪某个文件或目录;指出例外的情况,不忽略,如!main.pyc。
excludesfile 指定全局忽略文件。
设置方法:
只作用于当前目录(也就是.git目录的父目录)下,在 .gitignore 文件中添加 *.o 会忽略所有目录下产生的.o 文件,但在当前目录下的 .gitignore 中添加 *.o 却只能忽略当前目录下的 .o 文件。
Note:屏蔽某个目录下的某个文件,指定忽略路径时,路径是没有相对路径的,git管理下的所有文件都会进行搜索。
git 还提供了另一种 exclude 的方式来做同样的事情,不同的是 .gitignore 这个文件本身会提交到版本库中去。用来保存的是公共的需要排除的文件。而 .git/info/exclude 这里设置的则是你自己本地需要排除的文件, 他不会影响到其他人。也不会提交到版本库中去。工程目录下找到.git/info/exclude,把要排除的文件写进去。
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
Note: 如果使用Windows,windows下貌似不能创建.gitignore这个文件,如果你在资源管理器里新建一个.gitignore文件,提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。lz发现还可以这样做:打开git,cd到.git文件夹下,输入命令touch .gitignore就可以创建成功了。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
#others' project
charimage/
#not for stage (never add)
.idea/
datasets/
*.mtx
launcher0
launcher7133709813684183199
*.bak
*~
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*.npy
# C extensions
*.so
Debug/
ipch/
# Distribution / packaging
.Python
env/
build/*
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit LanguageAnalysis / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
# Translations
*.mo
*.pot
# Django stuff:
*.log
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
[Ignoring files]
[git 创建 .gitignore 文件过滤规则及注意事项]
[Git 过滤文件,控制上传]
1. $ git add readme.txt
$git add --all . #同时包含git add .和git rm 所有已经删除的文件
Note:
1. 如果不add到暂存区,那就不会加入到commit中。
2.workspace中某个文件夹右键 > git add all files now
如果是你删除了某个文件如1.txt,怎么才能提交这种修改:
方法1.现在的git2.0版本使用git add 1.txt不行,可以用git rm 1.txt 将删除动作提交到stage中。直接使用git add 1.txt会提示错误:Changes not staged for commit: (use "git add/rm
方法2. 直接删除一个文件,但是之后要用git commit -a -m 'update'来提交,才能提交删除的文件到远程和本地库中,与git1.0不同。(现在好像也不用加-a了)
其它删除文件相关的内容[Git版本控制教程 - Git查阅、撤销修改和版本回退:git删除和恢复删除的文件]
绿色是已经add到暂存区stage中的(右键add进去的), 红色是在工作区workspace还没add到stage中的
查看difference
撤销git add .
git reset HEAD . 也就是刚刚git add了文件,将其从暂存区删除,不add
$ git commit -m "wrote a readme file"
Note:
1. -m
后面输入的是本次提交的说明,可以输入任意内容。如果说明中没有空格等分隔符,可以省略""号。
2. 提交信息内容的建议:写明为什么,不要写做了什么. Anyone can see WHAT you did just by looking at the code. But the code can never tell someone WHY you did it.using the word “should” can help frame things.
[Writing Great Git Commit Messages][Preemptive commit comments]
commit
可以一次提交很多文件,所以你可以多次add
不同的文件。commit后暂存区中的都提交了。
总结
在本地创建repository版本管理的步骤如下
git init git add README.md git commit -m "first commit"
Note:在github上创建完成repository后就是这个提示。
皮皮Blog
工作区(Working Directory):就是你在电脑里能看到的目录,比如E:\mine\pythonworkspace文件夹。也叫Working tree?
版本库(Repository):工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区(stage);
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支(master)。(但个人理解commit后应该并没有清空stage,因为可以使用git rm --cached来将commit的大文件从stage中删除)
git add两个文件后,暂存区的状态就变成这样了:
所以,git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。现在版本库变成了这样,暂存区就没有任何内容了:
git中代码的三种状态:unstaged, staged 和 committed
unstaged表示该代码尚未开发完成,staged表示代码开发完成了,准备提交但是尚未提交,committed自然就是提交过的了。
让代码从unstaged变成staged,要通过命令git add
让代码从staged变成committed,自然要使用命令git commit
Note: Untracked Files,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 add 及 commit 过的文件)或者是加入到ignore文件中去的那些?
[http://nvie.com/posts/a-successful-git-branching-model/]
皮皮Blog
user.name
和
user.email
,实际上,Git还有很多可配置项。
$ git config --global color.ui true
这样,Git会适当地显示不同的颜色,比如git status
命令,文件名就会标上颜色。
$ git config --global alias.st status
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
以后提交就可以简写成:
$ git ci -m "bala bala bala..."
--global
参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
在撤销修改中,我们知道,命令git reset HEAD file
可以把暂存区的修改撤销掉(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage
别名:
$ git config --global alias.unstage 'reset HEAD'
当你敲入命令:
$ git unstage test.py
实际上Git执行的是:
$ git reset HEAD test.py
配置一个git last
,让其显示最后一次提交信息:
$ git config --global alias.last 'log -1'
这样,用git last
就能显示最近一次的提交:
$ git last
commit adca45d317e6d8a4b23f9811c3d7b7f0f180bfe2
Merge: bd6ae48 291bea8
Author: Michael Liao
Date: Thu Aug 22 22:49:22 2013 +0800
merge & fix hello.py
甚至还有人丧心病狂地把lg
配置成了:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
配置Git的时候,加上--global
是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
每个仓库的Git配置文件都放在.git/config
文件中:
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = [email protected]:michaelliao/learngit.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1
别名就在[alias]
后面,要删除别名,直接把对应的行删掉即可。
而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
中:
$ cat .gitconfig
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = [email protected]
配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。
cd E:/mine/python_workspace
lz提示一下,windows下是自带有的,哈哈。
在Unix系统下,运行以下指令来获取脚本:
cd ~from:http://blog.csdn.net/pipisorry/article/details/44588351
ref:git Documentation
git book*
git command Reference*
git(1) Manual Page
Git学习笔记
http://www.liaoxuefeng.com/
http://gitref.org/
git入门经典
Git-Tutorial-ebook+github+tutorial
git - 简明指南
Git 10 周年访谈:Linus 讲述背后故事 - 推荐阅读
git 问题
版本控制工具(CVS、SVN、GIT)简介
探索.git目录了解Git的真相