1 安装Github
2 安装msysgit
3 要配置用户名和油箱
git config --global user.name <用户名>
我的命令就是:git config --global user.name mchdbagh
git config --global user.email <油箱>
我的命令就是:git config --global mchdba@yahoo.com
4 验证有没有连接上remote远程服务器
ssh -T git@github.com
5 要生成ssh key
$ ssh -keygen
看到需要输入密码的,直接2个回车键即可回到主窗口。
去找.ssh里面的id_isa.pub打开,最好用notepad++打开,的里面的内容copy出来,然后放到https://网址里面,加入
如何生成,请看文档详细介绍。http://www.worldhello.net/gotgithub/index.html#id6
Git常用命令介绍
git init --初始化项目,刚开始初始化项目的时候使用
git clone --从服务器上克隆到本地,如果服务器上面已经有项目了,直接使用这个命令clone到本地进行使用。
git status --查看版本信息
git add --添加本地文件
git commit --提交更改
git push --tags --将更改推送到服务器
(1) git init操作
kyman@SKYMAN-CF7E3587 ~ mkdir test_git kyman@SKYMAN-CF7E3587 ~ cd test_git/ kyman@SKYMAN-CF7E3587 ~/test_git ls kyman@SKYMAN-CF7E3587 ~/test_git $ git init Initialized empty Git repository in c:/Documents and Settings/skyman/test_git/.git/ ls -a .. .git
看到有.git文件
$ ls -al total 0 drwxr-xr-x 3 skyman Administ 0 Sep 25 23:10 . drwxr-xr-x 41 skyman Administ 0 Sep 25 23:10 .. drwxr-xr-x 1 skyman Administ 0 Sep 25 23:10 .git $
看到多另一个.git目录,表示项目创建成功了。
(2) git clone操作
登陆 https://github.com/,看右下角,如图下图,找到打开库的网址把提示mchdbagh/manual56加到后面,网址就是 https://github.com/mchdbagh/manual56
打开后,点击右下角的HTTPS clone URL栏目下方的复制按钮,就得到了库的clone地址 https://github.com/mchdbagh/manual56.git,如图所示
也可以选择ssh方式:git@github.com:mchdbagh/manual56.git
git clone git@github.com:mchdbagh/manual56.git;
打开 git clone git@github.com:mchdbagh/helloworld.git
如果需要自定义一个目录名,可以写成 git clone git@github.com:mchdbagh/helloworld.git test_hw
检测是否clone成功,看到有manual56目录是否存在
$ ls AppData Favorites NTUSER.DAT SendTo _viminfo manual56 wc Application Data IECompatCache NetHood Templates admovie.jpg ntuser.dat.LOG ?????????????????? CMB IETldCache PrintHood UserData client.log ntuser.ini ?????? Contacts Local Settings PrivacIE VirtualBox VMs extensions ntuserdirect_MyManager.dat Cookies My Documents Recent WINDOWS helloworld test_git
(3) git add 操作实验
$ cd manual56/ --查看git当前版本库的状态 $ git status # On branch master nothing to commit (working directory clean) --进入我要修改的章节目录 $ cd docs/Chapter_17/ $ vim 17.5.0.0.0.md --新建一个md文件,里面简单写“only a test”字符串,wq保存退出编辑状态。 -- 查看状态 $ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # 17.5.0.0.0.md --看到有红颜色的一个新的文件还没有提交上去,这一行的文件名显示为红色。 nothing added to commit but untracked files present (use "git add" to track)
添加文件add
git add 17.5.0.0.0.md添加单个文件,多个文件可以用空格来隔开,比如(git add 17.5.0.0.0.md 17.5.0.0.1.md 17.5.0.0.2.md),也可以使用git add -A添加所有的文件。
--执行添加命令 $ git add 17.5.0.0.0.md --查看单个文件版本状态 $ git status 17.5.0.0.0.md # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: 17.5.0.0.0.md # --查看整个库版本状态 $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: 17.5.0.0.0.md #
手动用MarkdownPad打开C:\Documents and Settings\skyman\manual56\docs\Chapter_17\17.5.0.0.0.md,在里面输入中文字符串,保存退出。然后查看版本库状态,显示绿颜色的表示已经缓存起来了,显示红颜色的是修改过的但是没有缓存起来的。
(4) git commit,修改完之后,进行commit提交 git commit -m "Test change", -m 是指定提交信息,必填项目$ git commit -am "Test chanage" [master 3e96f90] Test chanage 1 file changed, 1 insertion(+), 1 deletion(-) $ git status # On branch master # Your branch is ahead of 'origin/master' by 2 commits. # nothing to commit (working directory clean) --显示已经提交到本地版本库了
(5)把已经修改的文件push到服务器,git push --tags --push所以缓存到本地服务器的文件。
$ git push origin master Counting objects: 13, done. Delta compression using up to 2 threads. Compressing objects: 100% (8/8), done. Writing objects: 100% (10/10), 768 bytes, done. Total 10 (delta 6), reused 0 (delta 0) To git@github.com:mchdbagh/manual56.git e754e68..3e96f90 master -> master(6)git diff查看已暂存和未暂存的更新
实际上 git status
的显示比较简单,仅仅是列出了修改过的文件,如果要查看具体修改了什么地方,可以用 git diff
命令。稍后我们会详细介绍git diff
,不过现在,它已经能回答我们的两个问题了:当前做的哪些更新还没有暂存?有哪些更新已经暂存起来准备好了下次提交? git diff
会使用文件补丁的格式显示具体添加和删除的行。
假如再次修改 README 文件后暂存,然后编辑 benchmarks.rb 文件后先别暂存,运行 status
命令,会看到:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD
..." to unstage)
#
# new file: README
#
# Changed but not updated:
# (use "git add
..." to update what will be committed)
#
# modified: benchmarks.rb
#
要查看尚未暂存的文件更新了哪些部分,不加参数直接输入 git diff
:
$ git diff
diff --git a/benchmarks.rb b/benchmarks.rb
index 3cb747f..da65585 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -36,6 +36,10 @@ def main
@commit.parents[0].parents[0].parents[0]
end
+ run_code(x, 'commits 1') do
+ git.commits.size
+ end
+
run_code(x, 'commits 2') do
log = git.commits('master', 15)
log.size
此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。
若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用 git diff --cached
命令。(Git 1.6.1 及更高版本还允许使用git diff --staged
,效果是相同的,但更好记些。)来看看实际的效果:
$ git diff --cached
diff --git a/README b/README
new file mode 100644
index 0000000..03902a1
--- /dev/null
+++ b/README2
@@ -0,0 +1,5 @@
+grit
+ by Tom Preston-Werner, Chris Wanstrath
+ http://github.com/mojombo/grit
+
+Grit is a Ruby library for extracting information from a Git repository
请注意,单单 git diff
不过是显示还没有暂存起来的改动,而不是这次工作和上次提交之间的差异。所以有时候你一下子暂存了所有更新过的文件后,运行git diff
后却什么也没有,就是这个原因。
像之前说的,暂存 benchmarks.rb 后再编辑,运行 git status
会看到暂存前后的两个版本:
$ git add benchmarks.rb
$ echo '# test line' >> benchmarks.rb
$ git status
# On branch master
#
# Changes to be committed:
#
# modified: benchmarks.rb
#
# Changed but not updated:
#
# modified: benchmarks.rb
#
现在运行 git diff
看暂存前后的变化:
$ git diff
diff --git a/benchmarks.rb b/benchmarks.rb
index e445e28..86b2f7c 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -127,3 +127,4 @@ end
main()
##pp Grit::GitRuby.cache_client.stats
+# test line
然后用 git diff --cached
查看已经暂存起来的变化:
$ git diff --cached
diff --git a/benchmarks.rb b/benchmarks.rb
index 3cb747f..e445e28 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -36,6 +36,10 @@ def main
@commit.parents[0].parents[0].parents[0]
end
+ run_code(x, 'commits 1') do
+ git.commits.size
+ end
+
run_code(x, 'commits 2') do
log = git.commits('master', 15)
log.size
OK成功了,然后打开网址https://github.com/xxxxxx/blob/master/docs/Chapter_17/17.5.0.0.0.md去看提交的新内容,见图片所示,新建立的文件17.5.0.0.0.md已经成功上传到remote文件服务器了。
这些项目,如果是个人项目,已经足够满足我们的日常使用要求了,但是如果多人协同操作,那还是远远不够的。