Git通过命令行上传文件的系列问题

Git通过命令行上传文件的系列问题

Git是一个很好的项目代码存放库。最近我正在初步了解Git,以下是我在通过Git Bash(命令行)进行文件上传遇到的系列问题,同时做好学习笔记以方便自己的学习,希望对你们也有帮助。好的习惯造就好的人生。
4个状态

1. Git简介

Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper
git

2. User的配置(用户绑定)

2.1 文件配置

首先进入C:\Users\Administrator\ .gitconfig目录文件下,配置对应的user.name和user.email,并设置永久保存密码。
代码如下:
[credential]
helper = store
.gitconfig

2.2 命令行配置

在git.bash中输入:

git config --global user.name "Your Name" # 配置user.name
git config --global user.email "your_email@example.com" # 配置user.email
git config --global credential.helper store # 永久保存密码

3. SSH Key的生成

在git.bash中输入:

ssh-keygen -t rsa -C "your_email@example.com" # 生成SSH Key

如果已经有SSH Key,进入 ~/.ssh目录中用ls命令查询是否有id_rsa和id_rsa.pub两个文件,第一个文件为私钥,第二个文件为公钥。
SSH Key查询

4. 建立本地仓库

先进入项目目录下,输入:

git init # 把这个目录变成git可以管理的仓库

建立本地仓库成功后,初始化成功后项目里会多了一个隐藏文件夹.git。如果已经建立,会提示重新初始化并退出git仓库。
本地仓库建立
如何查找文件夹中隐藏的文件夹git:
点击页面上方菜单栏查看一项,选中隐藏的项目打勾,就可以显示隐藏的git文件。
隐藏文件git

5. 命令行文件上传

在git.bash中输入:

git add 文件名 # 将该文件添加到暂存区
git commit -m "commit" # 将暂存区内容添加到本地仓库中,双引号内是提交注释
git remote add origin 仓库地址 # 添加远程仓库,origin为远程仓库的别名,到github仓库中复制仓库地址,可以用https或者ssh
git push -u origin master # 将本地的分支版本上传到远程并合并,上传本地代码

命令端文件上传
1. 如何解决文件上传时报错warning:adding embedded git repository:项目名:
即在本地初始化的仓库(使用 git init的文件夹) 中的某一个文件夹,也含有.git文件。
首页需要删除子文件夹里的.git文件;
然后重新add、commit、push。

2. 如何解决文件上传时提示fatal:remote origin already exists.:
在git.bash中输入:

git remote -v # 查看远程仓库信息
git remote rm origin # 删除关联的origin的远程仓库
git remote add origin 仓库地址 # 到github仓库中复制仓库地址,可以用https或者ssh

6. 删除已上传文件

在git.bash中输入:

git pull origin master # 将远程仓库里面的项目拉下来
dir # 查看有哪些文件夹
git rm -r --cached 文件名 # 删除该文件
git commit -m "删除文件" # 提交,添加操作说明
git push -u origin master # 将本次更改更新到github项目上去

删除已上传文件

7. 删除git历史提交记录

hash算法(MD4,MD5,SHA-1及其他)

方法一:

git log # 查看git提交记录
git reset --hard commit的hash值 # 找到需要回滚到的提交点,复制它的hash值
git push origin HEAD --force # 将当前指向的head推到git

log记录
方法二:

git log # 查看git提交记录
git rebase -i commit的hash值前5位 # hash值为记录ID标识,会进入vi编辑页面,用j,k键进行上移和下移,用cw组合键命令将首行的pick替换为drop,然后按下ESC键退出vi的编辑模式,然后进入末行模式输入wq!保存并退出。
git log #查看git提交记录,是否确保已经删除。

vi编辑模式下的删除

8. 清空git所有提交记录

在git.bash中输入:

git checkout --orphan latest_branch # 切换到新的分支
git add -A # 缓存所有文件(除了.gitignore中声明排除的)
git commit -am "commit" # 提交跟踪过的文件(Commit the changes)
git branch -D master # 删除master分支(Delete the branch)
git branch -m master # 重命名当前分支为master(Rename the current branch to master)
git push -f origin master # 提交到远程master分支(Finally, force update your repository)

注:git commit -m用于提交暂存区的文件;git commit -am用于提交跟踪过的文件。

9. 移除敏感数据

如果将敏感数据(例如密码或 SSH 密钥)提交到 Git 仓库,可以将其从历史记录中删除。 要从仓库的历史记录中彻底删除不需要的文件,可以用git filter-branch命令和BFG Repo-Cleaner工具。

9.1 使用BFG

9.1.1 下载jar包

去官网下载BFG Repo-Cleaner的客户端(jar包)。将下载好的jar放到下载好的git库的同级目录。

9.1.2 使用mirror克隆新的仓库
git clone --mirror git@github.com:username(用户名)/my-repository.git(仓库名) # 到github仓库中复制仓库地址,--mirror后为仓库地址,可以用https或者ssh

注:在启动客户端时,报错warning:is not a invalid repository(不是一个有效的库),就按上面的方式重新clone。

9.1.3 删除不需要的文件
java -jar bfg.jar --delete-files id_{dsa,rsa}  my-repository.git # 删除仓库里所有的名为'id_dsa'或'id_rsa'的文件
java -jar bfg.jar --strip-blobs-bigger-than 100M my-repository.git # 删除仓库里所有大于100M的文件
java -jar bfg.jar --delete-folders doc  my-repository.git # 删除仓库里文件夹下所有的文件
git reflog expire --expire=now --all && git gc --prune=now --aggressive # 使用gc去除git认为多余的数据(上面调用命令删除的文件)
git push # 将代码提交到远程仓库

9.2 使用filter-branch

9.2.1 克隆

在git.bash中输入:

git clone https://github.com/用户名username/远程仓库名 # 从github克隆一个远程仓库到本地计算机

克隆

9.2.2 移除数据

在git.bash中输入:

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch 文件路径"
--prune-empty --tag-name-filter cat -- --all # git也支持删除文件夹的方式,只需在rm后添加'-r'

移除数据

9.2.3 防止再次提交

在git.bash中输入:

echo "文件路径" >> .gitignore # 创建.gitignore文件后面追加“文件路径”这个内容
git add .gitignore
git commit -m "Add 文件路径 to .gitignore" # 提交,添加操作说明

防止再次提交

9.2.4 提交git仓库

在git.bash中输入:

git push origin --force --all # 强制推送本地更改以覆盖github存储库,以及推送的所有分支

提交git仓库

9.2.5 提交git tags

在git.bash中输入:

git push origin --force --tags # 需要提交git tags,用以更新服务器的git tags

提交git tags

9.2.6 删除本地缓存

在git.bash中输入:

git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin # 执行git的gc操作清理本地缓存
git reflog expire --expire=now --all
git gc --prune=now

删除本地缓存

9.2.7 查看文件夹大小

在git.bash中输入:

du -hs # 完成上述所有操作后,再使用命令du -hs查看文件夹大小,发现项目只有100k左右。此时即完成移除敏感数据的相关操作。

查看文件夹大小

10. SVN和Git的区别

SVN集中式版本控制系统,版本库是集中放在中央服务器的,集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。
工作原理:工作时用的都是自己的电脑,所以首先要从中央服务器获得最新的版本,完成工作后需要把自己做完的任务推送到中央服务器。

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上。
工作原理:A在电脑上改了某文件,B也在电脑上改了某文件,这时,A和B之间只需把各自的修改的内容推送给对方,双方就可以互相看到修改的内容。
svn
——>以上内容是关于git的user配置,SSH Key的生成,本地仓库的建立,文件的上传和删除以及log的删除和清空,BFG,filter-branch的系列操作。基础打扎实,不怕风吹雨打!内容有错误或者内容不全,望大家提出!我会继续写好每一篇博文,方便自己的记录和与你们在知识上的火花碰撞。

待续未完
——文优

欢迎观看和提问!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文优

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值