您的位置:首页 > 编程语言

Git管理本地代码

2015-08-05 11:28 281 查看
Ubuntu下git的安装和使用
系统:Ubuntu 15.05

玩开发板的时候要修改很多代码,有增添的有删除的有原基础小修改的,有时还要写一些测试程序,有时甚至要整个项目分好几个版本。原本,我在修改代码的时候采取的是注释的形式,写明这行是我添加的,这部分是我注释的。

当项目是线性的时候这种方法当然很好,但是我想在此基础上有没有更完善的管理代码的方式?比如,我对linux3.0移植了A功能和B功能,某天我要对linux移植A功能和C功能,但又不想保留B功能。按照以前的做法就是注释掉一切B功能的代码然后加上C功能,但如果某天我又想用到包含B功能的那个版本的时候希望能快速切换回去,那么这种一个个文件去改的方式就会很累,当然以我目前对嵌入式的移植能力还算不上累,但是以后总会遇到复杂的项目。复杂项目里面肯定会有很多版本迭代,版本间还不是线性的,而是像树状的,如果纯靠人脑我没有这个能力。

大概这个样子:






我想linus在很多年前也是这样想的,所以他自己写了一个代码管理软件git。为什么我不用SVN?因为我看到知乎里面好多人管理代码都用github,所以我就跟风了。

 

安装git

Ubuntu下安装git可以用apt-get直接安装。

zhou@zpc:~$sudo apt-get install git-core

安装好后我们建立一个目录来尝试用一下

zhou@zpc:~$mkdir git

zhou@zpc:~$ cdgit

我们要对git进行一些配置,添加我们的用户名和邮箱,这是为了方便git对代码管理时知道是谁进行了修改。

zhou@zpc:~/git$git config --global  user.name zhouqing

zhou@zpc:~/git$gitconfig --global user.email
zq979999@outlook.com


git下有很多命令很多功能,我们试一下最简单的,复杂的我还没学会。

zhou@zpc:~/git$git init

初始化空的 Git
版本库于/home/zhou/git/.git/


zhou@zpc:~/git$git status

位于分支 master

 

初始提交

 

无文件要提交(创建/拷贝文件并使用 "gitadd"
建立跟踪)


zhou@zpc:~/git$git log

fatal: baddefault revision 'HEAD'

git init是建立一个仓库,就是说该目录以下包括所有子目录下的内容都纳入git的管理了。

Git status查看当前状态,我们位于主分支,当然以后可以创建其他分支。

Git log查看日志,现在什么都没有,会报错。

现在模拟写代码过程

zhou@zpc:~/git$echo 1 > code.c

zhou@zpc:~/git$git add code.c

zhou@zpc:~/git$git commit -m "write 1 to code.c"

[master (根提交) 23a3b8f] write1 to code.c

 1 file changed, 1 insertion(+)

 create mode 100644 code.c

我们创建了一个code文件,里面第一行写入1。Git add将文件添加进暂存区,gitcommit将所有暂存区的文件提交,-m后为注释。

zhou@zpc:~/git$git log

commit23a3b8fdfe5a7e9f81201cd2b8e80b05be1dcdbe

Author:zhouqing <zq979999@outlook.com>

Date:   Wed Aug 5 11:05:06 2015 +0800

 

write 1 tocode.c

查看log我们看到了修改信息,commit后面的一串符号用来唯一地表示某一次提交,下面可以看到当次做了哪些更改,谁更改的。

我们再次修改code文件

zhou@zpc:~/git$echo 2 >> code.c

zhou@zpc:~/git$cat code.c

1

2

zhou@zpc:~/git$

在1后面再添加一行,写入2。然后添加提交

zhou@zpc:~/git$git add code.c

zhou@zpc:~/git$git commit -m "add 2 to code.c"

[mastere587d0c] add 2 to code.c

 1 file changed, 1 insertion(+)

zhou@zpc:~/git$git log

commite587d0c43ce0ef9afe4d9770a78d98a5766986b4

Author:zhouqing <zq979999@outlook.com>

Date:   Wed Aug 5 11:10:59 2015 +0800

 

    add 2 to code.c

 

commit23a3b8fdfe5a7e9f81201cd2b8e80b05be1dcdbe

Author:zhouqing <zq979999@outlook.com>

Date:   Wed Aug 5 11:05:06 2015 +0800

 

write 1 tocode.c

日志里记录了两次修改的痕迹。因为当前最新记录为e587d0(一般可以用前面几个字符表示就行了,不用敲完全部,但要保证不和其他的相同),我们对比一下和前一个提交有什么不同

zhou@zpc:~/git$git diff 23a3b8f

diff --gita/code.c b/code.c

indexd00491f..1191247 100644

--- a/code.c

+++ b/code.c

@@ -1 +1,2 @@

 1

+2

可以看到添加了2,像我们用过的补丁文件一样。

某天我们发现代码写错了,要回滚

zhou@zpc:~/git$ git reset --hard 23a3b8

HEAD 现在位于 23a3b8f write 1 to code.c

zhou@zpc:~/git$ git log

commit23a3b8fdfe5a7e9f81201cd2b8e80b05be1dcdbe

Author: zhouqing<zq979999@outlook.com>

Date:  Wed Aug 5 11:05:06 2015 +0800

 

   write 1 to code.c

zhou@zpc:~/git$ cat code.c

1

我们看到第二次提交的日志被删除了,文件也恢复到了第一次提交的结果。如果我们想保留提交的痕迹呢?

重新将2写进code文件中

zhou@zpc:~/git$ echo 2 >> code.c

zhou@zpc:~/git$ git add code.c

zhou@zpc:~/git$ git commit -m "add 2to code.c"

[master 045e611] add 2 to code.c

 1file changed, 1 insertion(+)

zhou@zpc:~/git$ git log

commit045e611a4e70d2dd88c6b8fea593370313c2eecf

Author: zhouqing<zq979999@outlook.com>

Date:  Wed Aug 5 11:20:04 2015 +0800

 

   add 2 to code.c

 

commit23a3b8fdfe5a7e9f81201cd2b8e80b05be1dcdbe

Author: zhouqing<zq979999@outlook.com>

Date:  Wed Aug 5 11:05:06 2015 +0800

 

write 1 to code.c

新的记录号为045e61,

zhou@zpc:~/git$ git revert 045e611

[master 40c437b] Revert "add 2 tocode.c"

 1file changed, 1 deletion(-)

zhou@zpc:~/git$ git log

commit40c437b5c656c23ca4ff98064682fa08413780ed

Author: zhouqing<zq979999@outlook.com>

Date:  Wed Aug 5 11:20:45 2015 +0800

 

   Revert "add 2 to code.c"

   

   This reverts commit 045e611a4e70d2dd88c6b8fea593370313c2eecf.

 

commit045e611a4e70d2dd88c6b8fea593370313c2eecf

Author: zhouqing<zq979999@outlook.com>

Date:  Wed Aug 5 11:20:04 2015 +0800

 

   add 2 to code.c

 

commit23a3b8fdfe5a7e9f81201cd2b8e80b05be1dcdbe

Author: zhouqing<zq979999@outlook.com>

Date:  Wed Aug 5 11:05:06 2015 +0800

 

   write 1 to code.c

zhou@zpc:~/git$ cat code.c

1

我们对该记录号进行撤销,注意这是revert不是reset,reset是回到某个记录号,revert是撤销某个记录号,reset会删除日志,revert不会。通过git log我们看到了三条记录,第二条为添加2到code,第三条为取消第二条提交。

 

其实git能实现的功能还有很多,这只是一小部分,关于git背后的知识可以看这里:

Git历险记(一)

http://www.infoq.com/cn/news/2011/01/git-adventures-1

 

Git历险记(二)——Git的安装和配置

http://www.infoq.com/cn/news/2011/01/git-adventures-install-config

 

Git 历险记(三)——创建一个自己的本地仓库

http://www.infoq.com/cn/news/2011/02/git-adventures-local-repository

 

Git历险记(四)——索引与提交的幕后故事

http://www.infoq.com/cn/news/2011/03/git-adventures-index-commit

 

Git历险记(五)

http://www.infoq.com/cn/news/2011/03/git-adventures-branch-merge

 

最后是福利



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: