http://blog.csdn.net/pipisorry/article/details/44588351
Windows下要使用很多Linux/Unix的工具时,需要Cygwin这样的模拟环境,Git也一样。Cygwin的安装和配置都比较复杂,就不建议你折腾了。不过,有高人已经把模拟环境和Git都打包好了,名叫msysgit,只需要下载一个单独的exe安装程序。
msysgit是Windows版的Git,从http://msysgit.github.io/下载,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”!
快速启动Git并自动切换到指定的文文件夹
命令行工具Git Bash还集成到了Windows的资源管理器中,在文件夹上右键,可以点击Git Bash Here和Git GUI Here快速启动Git并自动切换到指定的文件夹.
设置git的user name和email
配置命令
$ git config --global user.name "pipilove"
$ git config --global user.email "[email protected]"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。(注册过的)
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
查看git配置
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移除。
excludesfile 指定全局忽略文件。
设置方法:
只作用于当前目录(也就是.git目录的父目录)下,在全局的 .gitignore 文件中添加 *.o 会忽略所有目录下产生的.o 文件,但在当前目录下的 .gitignore 中添加 *.o 却只能忽略当前目录下的 .o 文件。
方法1.
git 还提供了另一种 exclude 的方式来做同样的事情,不同的是 .gitignore 这个文件本身会提交到版本库中去。用来保存的是公共的需要排除的文件。而 .git/info/exclude 这里设置的则是你自己本地需要排除的文件。 他不会影响到其他人。也不会提交到版本库中去。
工程目录下找到.git/info/exclude,把要排除的文件写进去。
例如下面可以排除文件夹data(所有data文件夹,data子文件夹)和migration和__pycache__,还有排除.npy,.mtx,.pyc文件。
还可以使用感叹号(!)来指出例外的情况,如!main.pyc。
# 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]
# *~
unlabeled_features.txt #屏蔽的具体文件名
__pycache__ #屏蔽的目录名
*.npy #屏蔽的文件类型
*.mtx
*.py[cod]
dist
build
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini
屏蔽某个目录下的某个文件,指定忽略路径时,路径要相对.git目录来说。如:
exclude:
dist/*.exe
而写成:
exclude:
TargetOpinion/dist/*.exe
方法2. 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。
不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
最后一步就是把.gitignore也提交到Git,就完成了!检验.gitignore的标准是git status命令是不是说“working directory clean”。
Note: 如果使用Windows,windows下貌似不能创建.gitignore这个文件,如果你在资源管理器里新建一个.gitignore文件,提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。lz发现还可以这样做:打开git,cd到.git文件夹下,输入命令touch .gitignore就可以创建成功了。
[Ignoring files]
[git 创建 .gitignore 文件过滤规则及注意事项]
[Git 过滤文件,控制上传]
1. $ git add readme.txt #git add . #add all files
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 <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deletee: 1.txt。从提示中看出del操作没有被staged。关于stage参考下面的[工作区和暂存区]部分。
方法2. 直接删除一个文件,但是之后要用git commit -a -m 'update'来提交,才能提交删除的文件到远程和本地库中,与git1.0不同。
其它删除文件相关的内容[Git版本控制教程 - Git查阅、撤销修改和版本回退:git删除文件]
{绿色是已经add到暂存区stage中的(右键add进去的), 红色是在工作区workspace还没add到stage中的}
git diff
查看difference
将暂存区stage中某些文件删除,不提交
$ 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
不同的文件:
$ git add file1.txt
$ git add file2.txt
$ git add file3.txt
$ git commit -m "add 3 files."
{暂存区中的都提交了}
git status变化:
总结
在本地创建repository版本管理的步骤如下
git init git add README.md git commit -m "first commit"
Note:在github上创建完成repository后就是这个提示。
皮皮Blog
工作区(Working Directory):就是你在电脑里能看到的目录,比如E:\mine\pythonworkspace文件夹
版本库(Repository):工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用git add
把文件添加进去,实际上就是把文件修改添加到暂存区(stage);
第二步是用git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支(master)。
git add两个文件后,暂存区的状态就变成这样了:
所以,git add
命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit
就可以一次性把暂存区的所有修改提交到分支。一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。现在版本库变成了这样,暂存区就没有任何内容了:
git中代码的三种状态:unstaged, staged 和 committed
unstaged表示该代码尚未开发完成,staged表示代码开发完成了,准备提交但是尚未提交,committed自然就是提交过的了。
让代码从unstaged变成staged,要通过命令git add <files>和git rm <files>
让代码从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 <[email protected]>
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(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)简介