Git使用实践--Linux Ubuntu(一)

目录

系统目录结构

Git 配置查看

仓库添加文件

关联远程仓库

创建分支与合并代码

向远程仓库上传更新


系统目录结构

参考文章「ubuntu目录结构说明」,通过快捷键ctrl+L键入 "~" 会指向/home/username,本文称为"家目录",键入 "/" 指向的位置则称为“根目录”。

参考文档如下「Git - 账户的创建和配置」、「linux使用git」、「Git config 查看和设置配置信息

Git 配置查看

Ubuntu系统如果没有安装git可以直接通过 sudo apt install git 命令完成安装或更新(但其实最初启动盘装系统的时候就已经完成过一遍配置了)。可以使用git --version指令确定完成安装或更新。

此时所有文件都保存在“家目录”的隐藏文件夹“.git”里面:

并且其中的config文件内容应该是只有[core]的初始化格式的:

之后如果使用“ git init ”进行仓库初始化操作会在“家目录”生成一个新的未作修改的".git"文件夹,并且会完全覆盖掉原先的“.git”文件夹内容。完成这一步以后可以尝试以下命令完成对本地仓库的帐号设置以及邮箱设置,它会自动在“家目录”下生成一个“.gitconfig”隐藏文件。

#对默认的本地仓库进行账户设置和邮箱设置
git config --global user.name  "RandomWalk"
git config --global user.email  "RandomWalk@gmail.com"

'''在初始化命令后给一个变量名,则会在家目录下生成对应文件名的文件夹,其内包含.git文件夹'''
git init NonRandomWalk

可以直接打开相应的文件查看内容,而如果使用终端的命令行操作,则需要键入如下指令,这时终端返回的内容除了[core]相关的属性信息(同上图),若已经对本地仓库进行了用户名和邮箱配置,还会返回“家目录”下的“.gitconfig”文件中的[user]相关的属性信息(本文的[user]为[RandomWalk])。

#查看git配置,如果无配置则应该都是空的
git config --list

因为和windows操作系统有差异,所以这里是不能使用Git -> Git Bash跳出git修改界面的终端对内容进行操作的,但是Ubuntu有自己的命令行修改方式,也即

#从终端跳入对~/.git/config文件进行修改的互动界面
git config --edit

附注:如果你有一个尚未进行版本控制的项目目录,想要用 Git 来控制它,那么首先需要进入该项目目录中(否则直接在“家目录”下生成)。

在 Linux 上:

$ cd /home/user/my_project
$ git init

初始化命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。 但是,在这个时候,我们仅仅是做了一个初始化的操作,你的项目里的文件还没有被跟踪。 (参见 Git 内部原理 来了解更多关于到底 .git 文件夹中包含了哪些文件的信息。)

仓库添加文件

本地初始化仓库后,使用“ git add +文件名 ”命令添加文件,这个流程就是版本控制,并不是对文件进行修改。并且只有使用“ git commit -m + '操作名称' ”后才算是执行了修改,这一点跟sql数据库命令的保护机制逻辑相同。(初始化后)若没有添加提交的操作,查看 master ("git checkout +xxx ")是不会有任何文件与之匹配的:

 完成git commit的提交指令之后就会得到如下反馈:

 

关联远程仓库

首先需要关联正确的远程仓库,并且需要知道远程仓库的“真实URL”长啥样,否则直接使用“ git clone ”命令就会产生如下报错:

 

远程Git仓库(Github)的URL应该在这里查看,高亮部分即为正确地址:

 

正确的关联流程如下,需要注意的是在完成“ git remote add origin + URL ”添加完远程仓库后,即使我们在上一级目录下初始化这个git仓库,执行“ git remote -v ”命令会发现已关联的远程仓库依旧是原来关联的内容,如果要对此进行更改,就必须执行删除操作。

 附注: 原文链接:「git删除远程分支_mandagod

1. git删除远程分支

git push origin --delete [branch_name]

2. 删除本地分支区别
git branch -d 会在删除前检查merge状态(其与上游分支或者与head)。
git branch -D 是git branch --delete --force的简写,它会直接删除。

共同点:都是删除本地分支的方法(与删除远程分支命令相独立,要想本地和远程都删除,必须得运行两个命令)。

#第一步:查看所有远程库的远程地址
git remote -v
#第二步:添加源分支 URL 这里upstream是随便取的名字,同理还有origin
git remote add upstream [源项目 URL]
#第三步:检查所有远程库的远程地址
git remote -v
#第四步:从源分支获取最新的代码
git fetch upstream /  git fetch upstream [特定分支]
#第五步:切换到主分支
git checkout master
#第六步:合并本地分支和源分支
git merge upstream/master
#第七步:Push 到 Fork 分支
git push
'''附注:删除远程仓库的有效指令'''
git remote rm origin

 附注:关联远程仓库不仅可以使用https协议,git原生内容反而效率更高

Git 支持多种数据传输协议。 上面的例子使用的是 https:// 协议,不过你也可以使用 git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git在服务器上搭建 Git 将会介绍所有这些协议在服务器端如何配置使用,以及各种方式之间的利弊。

需要注意,在执行第四步的时候有可能遇到问题,那就是“仓库自身设置为私密(private)”,因此终端要求验证用户名和密码,这在此前的关联部分是不会遇到的,另外不单是fetch操作需要鉴权,其他诸如push、clone等操作都需要完成鉴权,参考文章「ASDDAG的博客」,以及官方参考文档「Creating a personal access token - GitHub Docs」。

另外由报错也可以看到Github从2021年开始就不再支持「用户名+密码」的鉴权方式,而是改为了「用户名+口令」的方式,因此需要回到个人主页,通过以下流程完成口令设置:

"右上角-> settings -> developer settings -> Personal access tokens ->Generate new token"

值得注意的事,该口令只出现一次,需要及时复粘,此后只能重新设置新的口令。

如果使用git clone https://...去拷贝私密文档的内容,仍需要完成鉴权流程,比较麻烦!个人向工程中还是老实地完成下述操作(set-url效果等同于add),把之前复制的口令填入<your_token>即可;从别人分享的工程拉取代码也是按照这个操作来,口令部分不变,修改<USERNAME>/<REPO>。

操作完成后,在".git"中的config文件内,会对应地生成远程仓库的路径。

#避免每次操作Private仓库都要输入用户名和密码,直接在token@github部分完成鉴权
git remote set-url origin  https://<your_token>@github.com/<USERNAME>/<REPO>.git

#拉取相应远程仓库内的代码,效果跟git clone是一样的
git fetch origin

之后可以使用fetch把仓库内的源码下载到跟".git"文件夹相同目录的位置,效果如下图,"sys23"即为fetch得到的代码:

 

 

创建分支与合并代码

初始化之后使用“ git branch xxx ”会报错:fatal: 不是一个有效的对象名:'master'。(fatal: Not a valid object name: ‘master’.)这是因为初始化后的仓库里是没有匹配任何文件的,需要随便生成文件并提交上去才能再在此基础上生成分支:

'''文件名必须要在计算机中真实存在,否则报错:fatal: 路径规格'xxx'未匹配任何文件'''
git add .
git commit -m "kiss me babe"

#生成分支
git branch 'babyfolder'
git branch 'babyfolder1'
git branch 'babyfolder2'

文件夹变化的效果如下:

终端命令行检索的效果如下:这里也意味着这四个文件都是merged的状态(执行“ git branch merged ”还是返回下图中的终端输出),并且*号代表当前正指向master这个分支中。

 

 

合并命令如下:git checkout master,git merge sri/master

如果有冲突的话,需要丢掉本地分支:git reset --hard sri/master

向远程仓库上传更新

这时你的当前本地的项目变成和原作者的主项目一样了,可以把它提交到你的GitHub库:
git commit -am ‘更新到原作者的主分支’

'''以下三条命令基本等效,重复执行会在终端返回:Everything up-to-date'''
git push origin
git push -u origin master -f #"-f"是"-force"的缩写,即为强制提交
git push --set-upstream origin master

最后的效果如下:

 


至此基本上一次git实践就完成了,其余操作就是给定每次更新的版本号和查找版本变化流程之类的细节了,以后有机会会继续更新Git_project的实践坑。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值