git and github

整个系列课程的第一门是data scientists' tool box,这门课迄今为止(三个星期)主要是在解决git 和github安装配置使用的问题。

除了课程视频之外我也看了很多相关的博文,但收获比较小。这些内容可以手把手教会我如何实现某一个功能,但这个功能在全局中有什么意义还不明了,也就是虽然会了一些或许会很有用的边角,但是整体的框架仍然不具备。这样,一本体系完备的教程的意义就凸显出来了。我发现的对我最有用的资料如下

http://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E5%8F%96%E5%BE%97%E9%A1%B9%E7%9B%AE%E7%9A%84-Git-%E4%BB%93%E5%BA%93

接下来就在学习的过程中做一些笔记好了。

1.创建一个维护着一些文件的本地git仓库。


首先需要明白的是,git可以完全独立于github而存在。git是一个本地版本控制系统。这个系统被用于控制一些文件的版本,那么首先要来设置哪些文件需要跟踪。

用cd <filepath>命令(与cmd相同)进入目标目录,也就是将有文件需要被设为需要跟踪的目录作为当前目录。

git init是在当前目录下建立一个git repository,注意这个repo是本地的。它存在的具体形式是一个名为.git的隐藏文件夹,所有版本信息将会保存在这个目录下

然后在这个目录下选择需要跟踪的文件,用git add <filename>注意要带上拓展名!

书上暂时没有对跟踪并提交改动的指令作出解释,但是另一个资源上说得很清楚http://rogerdudler.github.io/git-guide/index.zh.html

维护git就要维护三棵树,第一棵是working directory,也就是要跟踪、要控制其版本的文件所在的目录;第二棵是index,就是一个索引,里面存放了git所要管理的所有文件的……呃,譬如说地址信息吧;第三个是head,这个文件存在于.git文件夹中。



从这个图来看他们之间的关系应该就非常清楚了。注意两个指令,add 和commit 使用场合的区别

git add *是跟踪该目录下全部文件;git add <filename>是跟踪目录下的指定文件;git add <directory>是跟踪这个子目录下的所有文件——注意,如果不经过这一步而只是进入这个子目录执行git add *,那么在上一层目录中执行git status得到的结果仍然是该子目录untracked,因为对其跟踪的信息是存在这个子目录下的。

此外,当一个已经被track的文件被修改之后,如果执行git status就会发现它处在unstaged for commit的状态,这个时候需要再次使用git add来stage它,才能在打包commi的时候commit到本地repo。关于git add的这个用法,还有一个有趣的例子。将unstaged for commit的文件git add之后,又对其进行修改,那么git status里面应该会有两个相同的文件,一个在unstaged for commit,另一个在staged for commit;但是前者是最新版,后者是上一次修改已经add的结果。如果要commit最新的版本,就需要再一次执行git add

除了git add以外还有用于忽略特定文件的指令,cat .gitignore在产生很多日志文件的大规模开发中具有清心顺气的作用……否则那么多日志文件真是会弄死人的啊!

如果要对一个在线的开源项目进行修改的话,我们不仅需要这个项目现在的代码(for instance),而且需要这个项目的版本信息以求同步。

通过git来实现的指令:git clone <url> 这个url指向需要clone的项目地址(具体来说是github上的一个repo),此举会在当前目录下建立一个新的目录,存有该项目的全部文件(因此,虽然git只是一个版本控制系统,但github是git的dropbox,github上有完整的项目代码),在这个目录中还会有一个.git用于存放版本控制信息。注意这个新建目录的名字默认为repo的名字,如果要重命名的话只需要 git clone <url> 'newname';还有一点需要注意的是在clone的过程中<url>支持不同的传输协议,我个人在最初配置git时已经设置成https了,因此在试验的时候也是用的https://地址。

对于文件状态的查看,除了git status可以查看文件是unmodified还是modified还是staged还是unstaged,如果要更细致地比较更改前后的内容,可以使用git diff。git diff会列出修改前后的全部文本内容。这里注意两个问题,第一个是如果是中文修改,在git bash中显示会有很多乱码,不知道这个怎么设置才能正常显示?第二个问题是两次修改连续进行,git diff显示出来用于比较的修改前的内容是第一次修改之前已经add过、处于staged to commit状态的内容,而不是第一次修改后的内容。这也映证git只在有命令的时候记录修改。

1.2.git commit

git commit指令就是把已经在暂存区(staged co commit状态下的)文件提交到本地repo。使用这个指令之后系统会打开git在这台机器上默认的文本编辑器,对于windows来说是vim。在这里面可以输入commit相关信息。编辑之后要退出vim,只要 ESC->TYPE":wq"->ENTER就可以了。关于vim的其他指令,在stackoverflow上面有很多相关的问答,很有用。这样显得很繁琐,如果不需要排版,可以直接使用 git commit -m "COMMIT INFORMATINO YOU TYPED"。

commit 只能提交staged for commit的文件。如果不想每次修改之后都bother to git add,可以直接使用git commit -a。如果要附加评论,就写git commit -a -m。

1.3 移除文件

git rm从跟踪列表中和工作目录中移除。如果手动删除了,也可以用gir rm来从跟踪列表中移除。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值