Git基础教程

前言

目前主流的项目代码管理工具分为2大类,一个是SVN,一个是Git。本文主要讲解Git的原理和使用。

SVN优缺点

优点及适用场景:

◆管理方便,逻辑明确,符合一般人思维习惯。
◆易于管理,集中式服务器更能保证安全性。
◆代码一致性非常高。◆适合开发人数不多的项目开发。

缺点:

◆服务器压力太大,数据库容量暴增。
◆如果不能连接到服务器上,基本上不可以工作
◆不适合开源项目或者大型团队协作开发的项目

Git优缺点

优点及适用场景:

◆适合分布式团队多人协作,敏捷开发。
◆公共服务器压力和数据量都不会太大。
◆速度快、灵活、可离线工作。
◆任意两个开发者之间可以很容易的解决冲突。

缺点:

◆学习周期相对而言比较长。
◆代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

原理

4个区

•Workspace:工作区,为电脑中实际的目录
•Index / Stage:暂存区,类似于缓存区域,临时保存你的改动。
•Local Repository:仓库区(或本地仓库),在.git目录下。
•Remote Repository:远程仓库。

3个步骤

✓git add .把所有文件放入暂存区;
✓git commit把所有文件从暂存区提交进本地仓库;
✓git push把所有文件从本地仓库推送进远程仓库。

5种状态

•未修改(Origin)
•已修改(Modified)&未追踪(Untracked)
•已暂存(Staged)
•已提交(Committed)
•已推送(Pushed)

安装

在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!

检查

在系统命令提示符中输入:git --version,如果打印了Git的版本号,则安装成功。

配置

配置Git用户和邮箱

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

与Github的连接

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:


当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

推送远程仓库

关联远程仓库

在Github上创建一个新的仓库需要和本地的目录一致,仓库名后面关联需要用到
然后再本地的Git终端输入

git remote add origin git@github.com:hy546880109/study.git   

推送到远程库上:

$ git push -u origin main     #因master带有歧视的含义,官方已经改成main了
Enumerating objects: 23,done.
Counting objects: 100% (23/23),done.
Delta compression using up to 8 threads
Compressing objects: 100% (23/23),done.
Writing objects: 100% (23/23),17.40 KiB | 1.34 MiB/s,done.
Total 23 (delta 2),reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2),done.
To github.com:hy546880109/mycs.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

推送成功可以直接在Github创建的新仓库下看到推送上去的本地文件了。

官网教程

或者直接参考官网的教程进行操作

错误处理

1,输入:git remote add origin git@github.com:yourName/yourRepo.git时

 报错:fatal: Not a git repository (or any of the parent directories): .git

解决办法:输入 git init ,初始化一个本地仓库

2,输入:git remote add origin git@github.com:yourName/yourRepo.git时

  报错:fatal: remote origin already exists.

解决办法:
1 删除Git仓库中的origin信息:git remote rm origin

2 重新添加Git仓库中的origin信息

3,输入:git push origin master 时

 报错:fatal: 'origin' does not appear to be a git repository

           fatal: Could not read from remote repository.

          Please make sure you have the correct access rights and the repository exists.

解决办法:重新输入一次:git remote add origin git@github.com:yourusername/test.git

4,输入:git push origin master 时

  报错:fatal: remote error:

      XXXXXX@qq.com/myarea is not a valid repository name Email support@github.com for help

解决办法:使用git remote rm origin 然后再使用上传命令

5,输入:git push origin master 时

  报错:To git@git.oschina.net:yangzhi/hello.git

            ! [rejected]        master -> master (fetch first)

           error: failed to push some refs to 'git@git.oschina.net:yangzhi/hello.git'

           hint: Updates were rejected because the remote contains work that you do

           hint: not have locally. This is usually caused by another repository pushin

           hint: to the same ref. You may want to first merge the remote changes (e.g.

           hint: 'git pull') before pushing again.

           hint: See the 'Note about fast-forwards' in 'git push --help' for details.

解决办法:出现这个问题是因为github中的README.md文件不在本地代码目录中。先进行代码合并 git pull --rebase origin master 再执行 git push origin master
6,输入git add ./时

报错:fatal: Not a git repository (or any of the parent directories): .git

解决办法:先输入git init,再add

相关文章

Git安装和使用 Git安装和使用 刚开始用git的小白适用,,转自...
fatal: remote origin already exists.解决方法 第一个问题g...
git常用命令(二)查看历史记录 git log [--pretty=oneline]...
git之如何把本地文件上传到远程仓库的指定位置 git专栏收录该...
代码规范之 lint-staged 在代码提交之前,进行代码规则检查能...
方法:1、文件没有git操作时用“git checkout--文件”命令还...