用git建立仓库服务——本地和GitHub

平台: Ubuntu 18.04

注意:git只能跟踪文本文件的改动,图片和视频等二进制文件的改动就难以跟踪了

1. 初始化git

  1) 安装git

sudo apt install git

  2)添加个人信息,个人用户名和邮箱地址,这样做commit等操作后可以有记录

git config --global user.name "用户名"
git config --global user.email "电子邮箱"

** 若没有参数“--global”,则这个用户名和电子邮箱将只对当前仓库有效

 

一、本地仓库操作

2. 建立本地仓库服务器  ——参考

  假定在本地建立仓库服务,相当于总仓库,子仓库放在“~/gitrepo/"目录下,当前仓库命名为demo.git(仓库服务器这里一般都是以.git结尾的文件夹)。

mkdir ~/gitrepo
cd ~/gitrepo
git init --bare demo.git    # 初始化了一个叫demo的仓库,文件夹为demo.git/
# 输出为:Initialized empty Git repository in /home/username/gitrepo/demo.git/

 

3. 应用到项目和将项目添加到本地仓库服务器

  1)假定已有项目名为project,在~/project/目录下,进入该目录。

git init
# 输出为:Initialized empty Git repository in /home/username/project/.git/

这里在当前目录下初始化了一个本地仓库(前面建立的是服务器仓库),相关仓库文件将放在 .git/ 目录下,.git/ 目录下的HEAD是指向master分支的指针。

 

   将仓库服务器和git建立连接,方便后面通过git将项目添加到仓库中。

git remote add origin ssh://username@10.xx.xx.xx:/home/username/gitrepo/demo.git  # 远端仓库名为origin,该命令只需执行一次

# 出现问题ssh: Could not resolve hostname 10.xx.0.11:: Name or service not known时,可以尝试用下面的添加方式  ——参考
git remote add origin username@10.xx.xx.xx:/path/to/repository             # 亲测有效

# 对于Windows地址可以参考如下写法
git remote add win ssh://username@10.xx.xx.xx.xx:/d/gitrepo/demo.git         # 也就是将Windows中的路径d:\gitrepo\demo.git用unix的表达方式表达为/d/gitrepo/demo.git  ——参考
# windows这个的问题是无法push过去到win,具体原因未知

这里添加了一个远端的仓库,名为origin。由于这是本地仓库服务,所以用到ssh协议连接,username和10.xx.xx.xx是ssh连接用到的用户名和ip,后面跟着远端仓库地址。

 

  2)下面对本地仓库做基本的修改,这些修改经过add后都将放在本地仓库(.git/)中。

git add .    # 将当前目录下所有文件添加到本地仓库里
git commit -m "add all new files to the repository"    # 添加commit,讲述这次对仓库做了什么操作

  可以在项目目录创建文件 .gitignore,里面记录不需要提交到库里的文件,防止每次不必要的提示。内容如

bin/
*.jpg
!bin/exp    # 忽略bin目录,但保留bin/exp目录
!bin/exp/*  # 目的:保留bin/exp目录下面的文件,但由于exp目录未被指定保留,所以这一句是无效的

 —— .gitignore编写方法 参考

 

  3)如果确定这次修改是有效的,要把本地仓库的修改更新到服务器那里,用push

git push origin master    # 将master分支的修改push到origin库,也就是demo.git

 

# 如果遇见错误
ssh: Could not resolve hostname xx.x.x.xx:: Name or service not known
fatal: Could not read from remote repository.

# 可以尝试重新添加远程仓库后再尝试
git remote add origin username@xx.x.x.x:/path/to/repository

 

4. 如果要在另一个地方使用该项目,可以用clone命令:

git clone ssh://username@10.xx.xx.xx:/home/username/gitrepo/demo.git

上面的命令将在本地创建一个demo文件夹,里面是仓库里的内容,也就是之前push的project里面的内容。

 

5. 常用的git命令

1)

git status            # 查看当前目录中的修改,如果有修改过的文件或者不在库中的文件,将有提示,即显示有可提交的文件  ——参考

git diff file          # 查看file和仓库中的版本相比做的修改
git add file           # 把file添加到暂存区(stage)
git commit -m "comments"    # 将暂存区的内容添加到仓库,-m后带的是一些备注【没有-m则会打开vim让添加备注】
git commit -am "comments"   # 省去git add,直接提交所有追踪到修改过的文件到仓库,并添加备注【无法添加新建的文件,需要用git add】

git clean             # 删除所有未跟踪的文件

git push repo brench      # 把分支brench的本地修改更新到repo
git pull repo brench      # 从远程仓库repo更新到本地brench

git log              # 查看最近三次的提交历史记录,会有每次提交的commit hash、作者、时间、备注内容等

git remote [-v]         # 查看远程仓库有哪些,加 -v 参数将增加显示详细信息——远程仓库的地址

  删除文件后(rm a.txt),要commit一下才能使仓库中对应文件也删除——commit就是更新库的状态和内容

** 问题:error: The following untracked working tree files would be overwritten by merge  ——原因:本地仓库的内容不是从服务器仓库拉取的,源头不同,再从服务器拉取内容时,会发生冲突

解决:git pull强制覆盖本地的修改    先clone再pull(不实际) 先把本地版本移到其它地方

 

git fetch origin / --all        # 只拉取到本地库,不会有其它操作, --all会拉取所有remote库,谨慎操作
git reset --hard origin/master    # 将hard指向 origin的master分支,而不是原来的本地master分支,相当于强制覆盖
git pull origin master

 

更多参考——详细参考

 

2)版本回退

git reset --hard HEAD^      # 回退到上一版
git reset --hard HEAD^^     # 回退到上上版
git reset --hard HEAD~50    # 回退到前第50版

若又要恢复到最新版

git reflog              # 查看版本号和commit备注
git reset --hard xxxx      # xxxx是7位的版本号,也是commit hash的前7位
git checkout -- file        # 撤销对file的修改,让file回到和版本库中的一样的状态

3)分支操作

git branch            # 查看所有分支,当前分支是带*的
git branch dev          # 创建dev分支
git branch -d dev        # 删除dev分支 git checkout dev         # 切换到dev分支 git checkout
-b dev       # 创建并切换到dev分支

git merge dev          # 将dev合并到当前分支上,如果合并文件产生了冲突(两个分支对同一个文件做了不同修改),要先解决冲突

 

4)若文件名有中文,用git pull 拉取时,可能仅显示GBK码(如/204),而不显示中文

解决:  执行下面的命令  ——参考博客

git config --global core.quotepath false

 

二. 连接到GitHub仓库

博客参考

posted @ 2022-01-13 16:35  谷小雨  阅读(341)  评论(0编辑  收藏  举报