github学习记录

引言

参考博客.
常用组合1:

git add .                      #添加到暂存区,可以将.换成具体文件的名称
git commit -m "message"        #本地做提交
git push origin master         #把本地master分支的最新修改推送至GitHub

常用组合2:

git init							# (初始化本地仓库)
git add .  							#(将本地所有文件加到仓库里)
git commit -m "message" 			#(设置提交信息)
git remote add origin   git@github.com:Usrname/repositoryName.git				#(本地仓库链接远程仓库)
git push -u origin master 			#(push文件到仓库中,第一次加参数-u)

1.安装及初始化git

参考博客前一部分。

sudo apt-get install git
git config --global user.name "Your Name"   #配置
git config --global user.email "email@example.com"

.  创建 SSH Key : 在用户主目录下(Windows:C:\Users\Administrator\.ssh),看看有没有.ssh目录,如果有,再看看这个目录下有没有 id_rsa 和 id_rsa.pub 这两个文件,如果已经有了,可直接跳到下一步 。 如果没有,打开Windows下打开Git Bash,创建SSH Key:ssh-keygen -t rsa -C "youremail@example.com"
  里面有id_rsa和id_rsa.pub两个文件,这两个就是SSHKey的秘钥对,id_rsa 是私钥,不能泄露出去,id_rsa.pub 是公钥,可以放心地告诉任何人。登陆GitHub,打开“Settings”,“SSH and GPG keys”页面 , 点击 “new SSH keys”.Title随意取但是最好有寓意,在Key文本框里粘贴id_rsa.pub文件的内容 , 完事后 "ADD SSH keys "。  
  在这里插入图片描述
  为什么GitHub需要SSH Key?因为GitHub需要识别出推送的提交确实是本人推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了本人的公钥,就可以确认只有本人才能推送。

2.新建仓库

参考链接,首先在网页上添加一个仓库。在GitHub上的这个仓库还是空的,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容上传到GitHub仓库里面。
  进入本地仓库目录下:git remote add origin git@github.com: githubUsrname/test.git
找到自己对应的仓库,点击 clone or download 里面就会有与仓库的对应的地址,粘贴到命令里即可
。远程库的名字就是origin,这是Git默认的,也可以改成别的,但是origin这个名字一看就知道是远程库。

ls -ah 	#可以看目录下默认的隐藏的文件。
git remote					#为了便于管理,git每个远程远程主机必须有一个主机名,git remote 会列出远程库的名字,默认是origin
git remote -v				#查看远程主机的网址。
git remote rm 主机名 		#删除远程主机
git remote add 主机名		#远程仓库地址 : 主机名对应origin, 远程地址 git@github.com:HWdragon/test_dragon.git
git push -u origin master 
#把本地的内容推送到远程仓库里,把当前分支master推送到远程里,因为github 默认创建就有一个 master 分支,可以输入命令 git branch 查看 ,带 * 的表示当前在哪个分支 。

由于远程库是空的,第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

此后,只要本地作了更改,提交命令就很简单:

git add .                      #添加到暂存区
git commit -m "注解"            #本地做提交
git push origin master         #把本地master分支的最新修改推送至GitHub

问题:每次都报错误信息,输入:

git remote add origin git@github.com:HWdragon/test_dragon.git
显示:fatal: 远程 origin 已经存在。
解决办法:git remote rm origin
再次输入:git remote add origin git@github.com:HWdragon/test_dragon.git
推送远端:git push origin master

3.clone仓库

这一点真的很方便,在github上面找到好的项目后fork到自己的账户下面,然后直接clone(之前移植都是download,其实clone是最好的选择,download只是给没有github账号的一个备选项)到自己的目录就已经建立好了本地和远成的关联。假如到一个新的电脑上进行开发,无需U盘拷贝程序,直接clone下来然后更改后提交,完了后删除电脑上的所有程序,很酷!
  作了更改后就直接提交就是,.gitignore这些文件会自动查找出变动的文件上传(另外,Tab也是能补齐的):

git add .                      #添加到暂存区,可以将.换成具体文件的名称
git commit -m "注解"            #本地做提交
git push origin master         #把本地master分支的最新修改推送至GitHub

4.已存在仓库

参考链接.

4.1 创建远程仓库

登录github,在上边创建一个仓库
复制仓库链接,比如为git@github.com:alex-my/some-project.git

4.2 初始化本地仓库
进入本地项目执行以下命令

#初始化本地仓库
git init
#添加全部文件
git add .
#提交到本地仓库
git commit -m "提交说明"

4.3 本地仓库与远程仓库绑定
绑定到远程仓库,并提交

#绑定,并取一个别名,通常用origin,后面的地址是前边创建的远程仓库地址
git remote add origin git@github.com:alex-my/some-project.git
#把本地仓库地址提交到远程仓库
git push origin master

4.4 修改本地仓库,并提交到远程仓库
假设修改了README.md文件

git add .   						#在根目录或者在文件所在目录执行
git status							#查看变动
git commit -m "modify reade.md"		#提交到本地仓库
git pull 							#如果是多人合作的项目,请先pull
   
git push						 #推送到远程仓库(第一个使用默认,作用和第一个一样)
git push origin master

4.5 仓库别名
如果有多个仓库或者多个分支,在推送或者拉取的时候需要注意

git pull 仓库别名 仓库分支
git push 仓库别名 仓库分支

5.从github上下载部分文件

downGit更方便!!
github页面上只对一个仓库提供了一个下载接口,如果只需要下载改仓库里面的部分文件如何处理呢?
具体实现如下:
(1)创建一个空的本地仓库,同时将远程 Git Server URL 加入到 Git Config 文件中。

mkdir project_folder   #创建本地存在文件的文件夹
cd project_folder
git init
git remote add -f origin   <url>  # <url>:仓库clone链接****.git

(2) Config 中允许使用 Sparse Checkout 模式:git config core.sparsecheckout true
(3)指定真正想 Check Out 的文件,可以将它们作为一个列表保存在 .git/info/sparse-checkout 文件中,例如:

echo “libs” >> .git/info/sparse-checkout
echo “apps/register.go” >> .git/info/sparse-checkout
echo “resource/css” >> .git/info/sparse-checkout

(4)最后,以正常方式从想要的分支中将项目拉下来:git pull origin master

5.打标签

git branch
git checkout master
git tag v1.0             #打标签
git tag                  #查看所有标签
git push origin --tags  #将标签上传到网页版

默认标签是打在最新提交的commit上的。有时候,如果忘了打标签可以找到历史提交的commit id,然后打上:

git log --pretty=oneline --abbrev-commit
git tag v0.9 6224937     #打标签
git tag -a v0.1 -m "version 0.1 released" 3628164  
#创建带有说明的标签,⽤-a指定标签名,-m指定说明⽂字
git show v0.9            #查看标签信息
git tag -s v0.2 -m "signed version 0.2 released" fec145a

6.常见问题

 ! [rejected]        master -> master (fetch first)
error: 无法推送一些引用到 'git@github.com:××××/×××××System.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更

解决方案如下:
1.强行上传:git push -u origin +master
2. 尽量先同步 github上的代码到本地,在上面更改之后再上传
强行同步时最好自己清楚差别在在哪儿。

7.合并分支

  • 将 dev 分支合并到 master分支:
# 1.在 dev 分支进行提交修改
git add .
git commit -m "msg"
#  2.切换到 master 分支
git checkout master
#  3.合并 dev 到 master
git merge dev
#  4.回到 dev 分支
git checkout dev
  • 合并 dev 的某个 commit 到 master 分支:
# 1.在 dev 分支查看提交记录,commit id.
git log 
#  2.切换到 master 分支
git checkout master
#  3.合并 dev 的某个 commit 到 master 分支
git cherry-pick 62ecb3  
#  4.回到 dev 分支
git checkout dev

8.commit 格式

方法一:

git commit -m "this is
> a line
> with new lines
> maybe"

直接回车就可以换行,“>”符号表示已按Enter,并且有新行。

$ git commit -m "Another way of demonstrating multicommit messages:
>
> This is a new line written
> This is another new line written
> This one is really awesome too and we can continue doing so till ..."

第一行作为标题。

方法二:

git commit -m $'first line\nsecond line'

$’ string ’ 形式的单词会被特殊对待。该单词扩展为 string,并按ANSI C标准的规定替换了反斜杠转义的字符。

方法三:

git commit -m "title" -m "first line
> second line"

9.子模块

9.1.构建

假设主仓库为A ,A路径下有B、C两个子模块,子模块的地址分别为https://github.com/usr/B.githttps://github.com/usr/C.git.

  • 克隆主仓库 A并进入主仓库 A 目录:git clone <主仓库A的URL> cd A

  • 初始化并更新子模块 B:

    git submodule add <子模块B的URL> B
    git submodule update --init --recursive B
    
  • 初始化并更新子模块 C:

    git submodule add <子模块C的URL> C
    git submodule update --init --recursive C
    
  • 进入子模块 B 目录:cd B 在子模块 B 中,可以进行任何与 B 相关的操作,例如构建、测试或其他任务。

  • 返回主仓库 A 目录:cd ..

  • 进入子模块 C 目录:cd C 在子模块 C 中,同样可以进行与 C 相关的任何操作。

完成以上步骤后,就成功地构建了主仓库 A 并包含了子模块 B 和 C。

请注意,在初始化和更新子模块时,使用了 --init --recursive 参数来确保子模块的初始化和更新也是递归进行的,以获取子模块所需的所有文件和引用。

此外,可以根据需要对子模块 B 和 C 进行其他操作,例如切换分支、查看历史记录等。每次对子模块进行操作时,进入相应的子模块目录,并在该目录下执行相应的 Git 命令。

9.2.拉取

在这里插入图片描述
如果一个 Git 仓库包含了其他仓库(通常是作为子模块),可以使用以下步骤来克隆包含子模块的仓库:

  • 使用 git clone 命令克隆主仓库:git clone <主仓库的URL>
  • 进入已克隆的主仓库目录:cd <主仓库目录>
  • 初始化子模块:git submodule init
  • 更新子模块:git submodule update

通过以上步骤,将能够成功克隆主仓库以及它包含的子模块。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值