Git设定

设置用户名
$ git config –global user.name “username”



设置用户邮箱

$ git config –global user.email “user@Gmail.com”


加上 --global 表示是全局的设定。你可以使用 git config --list 这个指令來看你的 Git 设定內容
$ git config –list user.name=username user.email=user@Gmail.com



或是其实 Git 的设定档是储存在你的家目下的.gitconfig 隐藏档中,你可以使用编辑器将他们打开
$ cat ~/.gitconfig [user] name = username email =user@Gmail.com



使用终端来操作Git常会让人觉得一直打指令很繁琐,因此Git也有提供alias的功能,例如可以将git status缩写为git st,
$ git config –global alias.st status
这样一来只要打 git st 就等同于打 git status 了。



空白对有些语言是有影响的(像是Ruby),因为我们希望Git去忽略空白的变化,这时候你需要在你的设置加入:
$ git config –global apply.whitespace nowarn
如此一來 Git 对于空白的变化便会忽略不計。



Git预设输出是没有颜色的,我们可以让他在输出时加上颜色让我们更容易阅读:
$ git config –global color.ui true


开始使用Git (init, clone)

要开始使用 Git 你必须先建立一个 Git 的 Repository,你可以把它想做是一个资料库的意思,有两种方法可以建立一个 Git 的 Repository:

自己建立一个新的 Repository

例如我现在有个叫做 Animal 专案资料夹,我现在想要开始使用 Git 开始管理,因此我先将目录切换到 Animal 底下后输入git init

$ git init
Initialized empty Git repository in /Users/Jimmy/Projects/Animal/.git/

这时你就会看到 Git 告诉你说已经在这边建立好一个新的 Git Repository。


Clone(复制)别人的 Repository

例如我们在Github 上面看到人家的程式码想要抓下来自己修改,或是团队中别人的程式码,这时候他们通常会有一个Git 的档案位置像是在Github 的话你就会看到像下面的地方可以让你复制git 的clone 位置:

git clone

将他复制起来后到你的目录下输入 git clone

$ git clone https://gogojimmy@github.com/gogojimmy/Animal.git
如此便会将这个Git Repository下载到我们的资料夹, git clone 预设会将下载的git 存成一样档名的资料夹,如果你要更改成别的名称的话只需要在网址后面加上你想要更改的名称即可,像是:

$ git clone https://gogojimmy@github.com/gogojimmy/Animal.git    monkey
这样子下载下来的 Repository 的名称就会从原本的 Animal 变成 monkey 了。


Git的基本功(status, add, commit, log, .gitignore)

在一个 Git 的 Repository 中你可以输入git status来检查目前 Git 的状态

$ git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use “git add” to track)
这代表目前是一个干净的目录状态,没有未被追踪或是被修改的档案, On branch master 表示你目前正在名为 master 的 branch 上,等等会再说明 branch 的功用。我们现在在这个目录新增一个 test 档案后,再使用git status 来查看:

$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use “git add …” to include in what will be committed)
#
# test.rb
nothing added to commit but untracked files present (use “git add” to track)
这时候你会看到我刚刚新增的test.rb 档案变成在Untracked files (未被追踪的档案),表示过去在这个Git Repository 中从未有这支档案,是一支未被追踪的档案,我们要把这个档案让Git 能够追踪的话,我们使用git add 这个指令来把它加入追踪:

$ git add test.rb
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use “git rm –cached …” to unstage)
#
# new file: test.rb
#
你可以看到原本test.rb 还在Untracked files 中,经过我们使用git add test.rb 后他就变成了Changes to commit,通常我们称这个状态叫做stage ,修改过但还没使用git add 的档案称为unstage 。


Tips: 一次加入全部的档案

如果你一次修改了很多档案,懒得一个一个输入git add 的话,你可以输入git add . 这会帮你将所有刚刚修改过或新增加的档案一次Add 进stage 状态,但强烈不推荐这样的作法,这样的方法虽然方便但很容易会不小心加入一些其他不必要的档案,一个正确的观念是你必须随时都很清楚你的档案状态,因此最好是手动将你确定要加入的档案使用git add 来加入,有一个更好的作法是使用互动模式git add -i ,在互动模式下你可以方便的选择你要加入的档案,或是移除刚刚不小心加入的档案(revert)。

已经在stage 状态的档案的下一步就是准备提交( commit ),commit 是写程式时一个很重要的动作,一个commit 在Git 中就是一个节点,这些commit 的节点就是未来你可以回朔及追踪的参考,你可以想像就像是电玩游戏时的存档,每一个commit 就是一次存档,让我们未来在需要的时候都可以回到这些存档时的状态。因此我们将刚刚做的修改提交:

$ git commit
此时你会看到画面跳到你在 git 中设定的编辑器画面:

#
# Please enter the commit message for your changes. Lines starting
# with ‘#’ will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use “git rm –cached …” to unstage)
#
# new file: test.rb
#
这个视窗中最上面的空行是要给你写下你这次commit 的讯息,例如在这里写下“Add test.rb file to test git function”来表示这一次提交的目的,强烈建议在commit 的时候要尽量清楚表达这次commit 的内容为何,因为这会让你未来要回头看code 的时候能让你快速的找到你想要找的内容,也能对团队中其他成员了解你在做什么。

在 commit 完后会显出出你这次 commit 的更动:

[master 5f76371] add ignore files
2 files changed, 8 insertions(+), 0 deletions(-)
create mode 100644 .gitignore
create mode 100644 test.rb
如果你觉得每次这样跳出编辑器很麻烦,你也可以在 commit 时加上 -m 的参数来快速提交:

$ git commit -m “Add test.rb to test git function”
若使用-am 的话还能将所有未被add 的档案一并add 进来( 更新:如果是第一次新增还没有被add 的档案是不会一起加入的,只有之前已经被add 过commit 的档案才会被加入),但就像前面所说这样的作法并不推荐,你应该清楚的加入你应该加入的档案就好:

$ git commit -am “Add test.rb to test git function”
若使用 -v 的话会列出更动的纪录:
# Please enter the commit message for your changes. Lines starting
# with ‘#’ will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use “git reset HEAD …” to unstage)
#
# new file: .gitignore
# new file: test.rb
#
diff –git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..61521a9
— /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+*.swp
+log/*.log
diff –git a/test.rb b/test.rb
new file mode 100644
index 0000000..23df1c1
— /dev/null
+++ b/test.rb
@@ -0,0 +1,5 @@
+class Test
+ def test
+ puts “This is a test file”
+ end
+end
加号(+)代表增加的部份,减号(–)代表删除的部份。

我们可以使用 git log 的指令查看过去 commit 的纪录:

$ git log
5f76371 – (HEAD, master) add ignore files (3 minutes ago)
4ca268d – (origin/master) First commit (33 minutes ago)
前面的乱码代表的是当次 commit 的版号,后面的是 commit 的讯息、时间以及 commit的作者,你可以使用 –stat 参数看到更详尽的讯息:

$ git log –stat
5f76371 – (HEAD, master) add ignore files (7 minutes ago)
.gitignore | 3 +++
test.rb | 5 +++++
2 files changed, 8 insertions(+), 0 deletions(-)

4ca268d – (origin/master) First commit (37 minutes ago)
lib/animal.rb | 5 +++++
spec/animal_spec.rb | 5 +++++
2 files changed, 10 insertions(+), 0 deletions(-)
如果你想看到档案更详细的变更内容,你可以加上 -p 的参数:

$ git log -p
5f76371 – (HEAD, master) add ignore files (8 minutes ago)
diff –git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..61521a9
— /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.DS_Store
+*.swp
+log/*.log
diff –git a/test.rb b/test.rb
new file mode 100644
index 0000000..23df1c1
— /dev/null
+++ b/test.rb
@@ -0,0 +1,5 @@
+class Test
+ def test
+ puts “This is a test file”
+ end
+end
因此我们稍微做一下流程的整理:

修改档案 => 加入 stage (git add) => 提交( git commit )=> 继续修改其他档案

Tips: commit 的最佳时机?什么时候该 commit ?

什么时候才是commit 的最好时机并没有一个定论,大部分人会告诉你通常你完成了一个阶段性的小工作就做一次的commit ,我的感觉是当你想要记录目前的状态的时候就是你commit 的最佳时机,例如说刚完成某个page,某个任务需求而你想要做个记录的时候。

有些档案我们不希望加入版本控制的追踪,例如说Database的schema或是一些log档,这时候你可以将他们加入 .gitignore 中来让 Git 忽略他们,使用编辑器来打开你的 .gitignore 档案。

$ vim .gitignore
在这边假设我想将 Mac 自动产生的.DS_Store, vim 的 swp 暂存档及 log 档忽略,我便分行加入:

.DS_Store
*.swp
log/*.log
如此一来便会将这些档案从git追踪忽略了。

Tips: 被加入 gitignore 的档案一样出现在 status 中?

有时候你会发现即时你将档案加入了.gitignore 却一样会出现在Git 的追踪状态中,这是由于你想要忽略的档案之前已经被Git 追踪了,因此你现在想要让Git 忽略他的话只能先将他删除然后再commit 一次,再来这支档案再出现就不会再追踪这支档案了。

 

 

原文链接>>>>

0 Comments
Leave a Reply