写在最前面:
特意抽出时间学习git的原因是之后要攻读软件工程学位的博士,而git是大型软件开发很难绕过的一个东西。很惭愧,从大一开始接触计算机起的这四年中,居然从未给开源软件贡献过任何一行代码,也没有正式参与过大型软件的开发,仅仅是用于平时大作业或者下载论文源码,网页版的github已经足够满足需求。但是,在下一阶段的学习中,这肯定是不够滴,据我观察组内也是用自己搭建的git管理项目代码。本人习惯于先把早晚要做的事做完,再做别的事,所以也就有了这篇博客的诞生。 本文将记录一个仅仅只有网页版github经验的人的git入门过程。
git的作用
不使用git时,可以在名字中添加含有修改日期时间的信息,在每次修改时先复制要修改的文件,然后修改日期信息为当前时间,即可做到简单的版本管理。在单人使用时还算可以,但是如果多人协作开发,难免造成很多局限。
Git是一个分布式版本管理系统,初衷是为了更好地管理Linux内核开发。
Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。
而且,编辑旧文件后,试图覆盖较新的文件的时候(即上传文件到服务器时),系统会发出警告,因此可以避免在无意中覆盖了他人的编辑内容。
一些概念
Repository(仓库):记录文件或目录状态的地方,存储着内容修改的历史记录。在仓库的管理下,把文件和目录修改的历史记录放在对应的目录下。
Git的仓库分为远程仓库和本地仓库两种。
远程仓库: 位于实验室服务器或github上,为了多人共享而建立的Repository。 本地仓库: 为了方便用户个人使用,在自己的机器上配置的Repository。
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是复制(git clone)远程仓库。在项目中一般是复制(git clone)远程仓库。
push:若要把文件或目录的添加和变更保存到Repository,就需要进行push(提交)。执行push后,数据库中会生成上次提交的状态与当前状态的差异记录(也被称为revision)。
执行push时,系统会要求输入提交信息。这些信息是为了方便其他人能够方便地查看你的修改内容,在空白的提交信息下执行的push会被拒绝。标准的提交信息的格式如下:
第1行:提交修改内容的摘要
第2行:空行
第3行以后:修改的理由
工作树和索引
stage unstage:未被Git跟踪的状态为unstage状态
已经被Git跟踪的状态为stage状态,因此包括staging状态和staged状态
git配置和使用
全局设置name和email:本地电脑所有的git仓库都会使用此配置,对特定的仓库可以指定其他用户名和邮箱。
git config --global user.name zhangxin00
git config --global user.email hnuzhangxin@163.com
将当前文件夹变为一个可以管理的仓库:
pwd
git init
当前文件夹是工作区,将文件add到.git中才可以用git管理:
git add read.txt //add read.txt
git add . //add all files
之后,需要将暂存区的所有文件提交到仓库的当前分支(默认为master,如果有别的分支也可以提交):
git commit -m "add txt file"
-m后面引号内的内容是本次提交的说明,上面的概念中提过,该内容不能为空。
要随时查看工作区的状态,这条在整个过程中随时可以输入:
git status
git checkout可以用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”:
git checkout -- test.txt
修改暂存区(add了,还没commit):
git reset HEAD read.txt //当前版本HEAD,上一版本HEAD^,上上版本HEAD^^)
git reset --hard commit_id(git reflog获取commit_id)
从仓库中删除某文件:
git rm test.txt
git commit -m "delete test.txt"
git push
origin是推送的远程库的默认名字,可以改成别的,如果要改成别的,命令中的origin都要换成你自己要起的名字。 使用以下命令可以将本地仓库和远程仓库关联起来:
git remote add origin http://XXX
git push origin 本地分支名:远程分支名(可以省略远程分支名)
git push -u origin master //需要输入用户名和密码
git push origion master //第二次及以后可以简化命令
我们需要把远程仓库的最新代码克隆下来(此命令在你所要存放代码的目录下的终端运行,比如我要放在/home/github下,打开/home/github下的终端输入命令,那么克隆的代码路径为:/home/github/test1):
git clone http://192.168.1.3/zhangmi/test1.git
在这里,暂时先不考虑多分支了吧,这个暑假想先把基本命令玩熟。
查看远程仓库信息:
git remote
git remote -v //详细版
push代码到remote:
git push origin XXX(分支名)
git push origin master
//push的前提是你的版本必须最新,如果你push之前别人先push了,那你要先pull才能push
git pull origin 分支名
运行实例
配置username和email,查看git status: changes not staged for commit: 删除了某文件夹,但是git没有记录到,使用git rm在.git中将其删除即可: 创建了文件,但是git没add 全部commit之后就可以push了 登录网页端,发现github仓库(remote repository)的内容也更新了 git push的时候有时候会报错,因为可能remote repository被别人改动了,你本地的不是最新版本,需要先git pull: 删除本地仓库 rm -rf .git 本地修改一些文件试试:
常用debug
其实下面这些报错,试了几次,大多数时候等会自己就好了
//ssl认证
git config --global http.sslVerify "false"
//取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
//重命名
git branch -m oldBranchName newBranchName
//通常是:
git branch -m main master
好吧,我觉得这些东西已经可以满足目前的需求了(本地管理个人网站,而不用只依赖网页端编辑),branch merge checkout等操作目前好像完全用不到,按照按需学习的指导思想,之后再说~
|