命令行配置Github\Gitlab工程

git的仓储(repository)分为远程repository和本地repository。多人开发的工程通过远程repository进行协作(如github网页,或者本地服务器搭建的gitlab),个人通过本地的repository进行开发和版本管理。我们先讲解如何下载远程repository到本地,也是初学者学习各种工程最常用的命令;随后,讲解作为开发者如何配置本地的repository以及进行代码管理;最后,讲解如何将本地repository贡献到远程repository。

一、下载网页远端repository到本地

首次下载:

git clone https://192.168.8.66/YLY/test.git

默认将远端repository下载到运行上述命令的路径下。也可以选择将工程下载到指定文件夹名下:

git clone https://192.168.8.66/YLY/test.git test-src

以上命令下载的是master分支,若需要下载某一非master的分支:

git clone https://192.168.8.66/YLY/test.git/ --branch <分支名>

参见:https://www.cnblogs.com/Jing-Wang/p/10991008.html

更新: 如果本地已经存在曾经下载过的工程,需要更新人上传的新版本远端master:

git pull https://192.168.8.66/YLY/test.git

参考:https://www.cnblogs.com/gdwkong/p/8535712.html

若本地修改了代码,会报错:

error: Your local changes to the following files would be overwritten by merge:
Please, commit your changes or stash them before you can merge.
Aborting

解决方案:

git stash   #本地工作区的代码暂存到git栈中
git pull    #远程工程更新到本地
git stash pop  #之前本地修改的代码再更新到工作区

PS: 下载过程中如果出现证书错误,即

Cloning into 'test'...
fatal: unable to access 'https://192.168.8.66/YLY/test.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

 解决方案是在terminal中输入:

export GIT_SSL_NO_VERIFY=1

二、本地repsitory管理

1. 概述

需要熟练进行git代码管理需要了解git的一些一本概念

首先,了解git的data model, 包括blob object, tree object和commit object。 详见:https://medium.com/hackernoon/https-medium-com-zspajich-understanding-git-data-model-95eb16cc99f5

随后,理解branch的概念及其对应的ref,以及head的概念,参见:https://medium.com/hackernoon/understanding-git-branching-2662f5882f9

最后,掌握git的三个区域:working directory, staging area, and the repository,以及git操作git add, git commit对应的对三个区域的修改,可参考:https://medium.com/hackernoon/understanding-git-index-4821a0765cf

2. 首次配置本地git

全局配置:

git config --global user.name "YLY"
git config --global user.email "[email protected]"

生成本地repository:

cd your_folder_to_upload
git init  //本地仓储初始化,在文件夹中生成了 “.git”隐藏文件,用于接下来存储git的信息。其中,.git/object/里面包含了blob object, tree object, commit object;.git/refs/包含branch的信息;./git/index存储working directory, staging area, and the repository的文件版本信息

将working directory文件同步到staging area:

git add .   //同步working directory的文件到staging area, “.”表示添加文件夹下的所有文件

staging area文件同步到本地repository:

git commit -m "Initial commit"  // 文件存储到版本库区 (Commit History)

3. 如果修改了working directory的文件,需要同步到本地repository

可先查看working directory文件夹相对于本地repository发生的修改:

git status

随后再分别执行

git add your_changed_file //向本地repository中添加文件, “.”表示添加文件夹下的所有文件,如果只想添加特定文件夹或文件, 直接写 git add your_file_name
git commit -m "Changed files" // 将更改同步到本地repository (commit表示修改),此步骤不可忽略,因为远端repository是从本地repository进行同步的,所以必须先把修改同步到repository;如果修改没有同步到本地repository,直接push到远端,则会显示“Everything up-to-date”

4. 查看历史版本代码

使用git log查看commit的版本号,例如:

commit 5624dfsfsdfdsfsdfljsdpfpsdfsdlfjosdfi9c
Author: yly <[email protected]>
Date:   Thu Jan 21 15:05:35 2021 +0800

随后使用:

git checkout <SHA1>  //HEAD切换到具体的一个commit,但会导致git status时提醒HEAD detached at <SHA1>, 如果需要回到可被追踪的分支可以选择git checkout <branchname>
git checkout 5624dfsfsdfdsfsdfljsdpfpsdfsdlfjosdfi9c

将本地代码回退到历史状态。

若出现checkout后文件无法全部显示(出现很多D  files的提示),可运行:

git reset --hard 

若想回到最新的版本,只需要运行

git checkout master

建议的更安全的操作是创建一个分支,处理后再删除临时分支:

git checkout -b tmp_branch 5624dfsfsdfdsfsdfljsdpfpsdfsdlfjosdfi9c //进行历史版本查看或修改
git checkout master 
git branch -d tmp_branch

5. 版本回退

git reset --soft HEAD~1   //repository变为HEAD指向的commit,但是working directory和staging area保持不变,这里HEAD~1表示撤销上一次commit
git reset --mixed HEAD~1  //repository变为HEAD指向的commit,staging area也同步更新,但是working directory的内容保持原来不变
git reset --hard HEAD~1   //repository,staging area和working directory都变为HEAD指向的内容。

git版本回退教程参见:https://blog.csdn.net/yxlshk/article/details/79944535

reset更详细的介绍可参见:https://medium.com/hackernoon/reset-101-ba05d9e3f2c7

这种方法会造成历史版本的永久丢失,更推荐的方法是通过revert版本反做实现回退,即在后面添加过去的版本的新的commit:

git revert HEAD~1

6. 分支管理

程序更新后,可以上传到同一个工程的新分支,进行版本管理:

git branch  //查看所有分支和当前所在分支
git branch <branchname>  //创建分支
git checkout <branchname>  //切换分支
git checkout -b <branchname>  //创建+切换分支 For example, git checkout -b v2.0

git add .
git commit -m "New vision"

版本的分支可以有很多,但master只能有一个,一般是最新版本。可以把分支变成master,即点击merge request请求,随后master的管理员可以选择同意Merge,则该分支晋升为master。

merge的详细资料: https://medium.com/we-are-madewithlove/pointers-and-tips-dispelling-the-magic-of-git-merge-4c8bb3e227ac

三、远端git

1. 本地文件上传到github/gitlab上(远端网络repository):  

具体命令如下:

git remote add origin https://192.168.8.66/YLY/test.git //添加远端网络repository
git push -u origin master //将本地repository的更改同步到远端网络repository

git push origin <branchname> //For example, git push origin v2.0

PS:认证错误的解决

执行命令

git push -u origin master

时可能出现

remote: HTTP Basic: Access denied
fatal: Authentication failed for 'https://192.168.8.66/YLY/test.git/'

解决方案:

在terminal中输入

export GIT_SSL_NO_VERIFY=1

该命令仅在当前的terminal有效。

另一种可能的证书错误bug:

fatal: unable to access 'https://192.168.8.66/YLY/test.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none

解决方案:

git config --global http.sslverify "false"

进行操作,完成后再回置设置:

git config --global http.sslverify "true"

2.重新配置

2.1 删除本地repository:使用terminal删除文件夹下的 .git文件夹(隐藏文件夹)。

2.2 删除远端repository: 网页中setting->general->advanced->remove project。

2.3 添加新的远端地址或修改远端地址

例如,修改本地工程对应的远端,即上传到另一个远端repository上,直接添加新的远端地址会出现错误:

git remote add origin https://192.168.8.66/YLY/test_updated.git

显示: 

fatal: remote origin already exists.

解决方案:

git remote rm origin

随后再添加新的远端地址:

git remote add origin https://192.168.8.66/YLY/test_updated.git

 

bisect: https://konrad126.medium.com/keep-calm-and-git-bisect-1610c6bced29

猜你喜欢

转载自blog.csdn.net/Cxiazaiyu/article/details/99582806
今日推荐