如何使用Git将Github项目拉到本地


前言

因为国内访问GIthub速度比较慢,复制粘贴代码又慢效率也低,所以建议下载Git工具,直接把Github的项目整个下载到本地的文件夹



安装配置git

git拉一个java项目 git拉取github项目_Windows

步骤如下:

sudo apt-get install git

git config --global user.name "your user name"

git config --global user.email "your email"

ssh-keygen -C "your email" -t rsa

cd ~/.ssh

gedit id_rsa.pub	将其中的所有内容复制,到git上添加SSH Key

使用步骤



1.打开Github

  • 找到你想要获取的项目

git拉一个java项目 git拉取github项目_git_02

fork仓库(非必须)

  • 如果你需要对代码进行更改,然后还需要变成自己的项目,在自己的仓库进行开发,可以fork下来(不需要可以跳过)

为什么要fork仓库?

因为我们没有任何的权限向GitHub上的仓库提交任何的修改,我们只能把仓库fork到本地,然后在本地进行修改后,再提交到GitHub上,这样就可以修改仓库了

如何fork仓库

超级简单…hhhh
点击一个fork就行了

git拉一个java项目 git拉取github项目_Windows_03



  • 复制GIthub项目的下载地址

git拉一个java项目 git拉取github项目_Windows_04


拉取不同的分支(非必须)

上面是拉取的master分支,也就是主分支,如果你需要拉取部分或其他的分支可以这样:

步骤:

  • 找到master按钮
  • 选择要拉取的分支
  • 新建文件夹–>右键–>git bash here
# 步骤基本和拉取项目一样,但是命令变了
$ git clone -b [分支名] [项目地址]


2.打开Git

如果你是刚下载的Git,先配置一下用户名和邮箱

# 在Git Bash中输入以下命令
1. git config --global user.name "你的用户名"
2. git config --global user.email "你的邮箱"

基本配置就完成了!!!

下面介绍如何将项目下载到本地:

  1. 在你想要放置项目文件的位置新建一个文件夹
  2. git拉一个java项目 git拉取github项目_github_05

  3. 右键点击Git Bash Here
  4. 输入命令:git clone 粘贴之前复制的项目下载地址

git拉一个java项目 git拉取github项目_github_06

  1. 回车运行,进入下载
  2. 下载完成!

然后新建的文件夹里就会出现项目的所有文件啦!!!




啰嗦两句

  • 还未注册Github的小朋友,先注册一下哦 Github官网
  • 还未下载Git的小朋友,先行下载Git工具趴 git下载点这



提交代码到github

  1. 把github项目fork到本地
  2. 拉取你仓库你的同名项目到本地
  3. 修改里面的代码
  4. 提交代码操作

前三步,很简单就上面的操作




  • 许多开发人员从该存储库克隆,推送到他们自己的独立存储库,并要求集成商引入他们的更改。这是开源或 GitHub 存储库中常见的开发模型类型。

git拉一个java项目 git拉取github项目_github_07

git拉一个java项目 git拉取github项目_Windows_08

如何提交代码

  1. git branch 看下你的本地分支
  2. git status 看下你的修改状态(修改了哪个文件,添加了哪个文件,删除了哪个文件)
  3. git stash 把本次修改先暂存起来,为了拉develop的代码
  4. git pull origin develop 每次提交代码前一定要拉代码,保证本地拉到最新
  5. git stash pop 把暂存的代码释放出来和develop的合并,有冲突就解决一下
  6. git status 解决完冲突后,再看下你的修改状态,确保都是你的本次修改
  7. git checkout -b 分支名 切一个新分支,分支名要有意义一点(feat / fix / refine - xxx)
  8. git add . 添加本次所有的改动文件,如果不想提交那么多,就git add 要提交的文件名

git拉一个java项目 git拉取github项目_github_09

  1. git commit -m "提交信息" 提交信息是本次提交的概述,如fix home page ui bug
  2. git拉一个java项目 git拉取github项目_Windows_10

  3. git push origin 分支名 直接点击remote中的URL,用浏览器打开,补充一下提交信息,assignee给同伴,勾选merge options,然后点commit就好了

注:git commit -m "..."以后,发现本地少提交一个文件,可以用git commit --amend修补提交,再次git push -f 就可以了,不会出现多个commit的情况



  • 遇到这个报错(Windows下)

问题分析:

格式化与多余的空白字符,特别是在跨平台情况下,有时候是一个令人发指的问题。由于编辑器的不同或者文件行尾的换行符在 Windows 下被替换了,一些细微的空格变化会不经意地混入提交,造成麻烦。虽然这是小问题,但它会极大地扰乱跨平台协作。

  • 其实,这是因为在文本处理中,CR(CarriageReturn),LF(LineFeed),CR/LF是不同操作系统上使用的换行符,

Dos和Windows平台: 使用回车(CR)和换行(LF)两个字符来结束一行,回车+换行(CR+LF),即“\r\n”;


Mac 和 Linux平台:只使用换行(LF)一个字符来结束一行,即“\n”;
最早Mac每行结尾是回车CR 即’\r’,后mac os x 也投奔了 unix。

  • 许多 Windows 上的编辑器会悄悄把行尾的换行(LF)字符转换成回车(CR)和换行(LF),或在用户按下 Enter 键时,插入回车(CR)和换行(LF)两个字符。


git拉一个java项目 git拉取github项目_提交代码_11


解决:

Git 可以在你提交时自动地把回车(CR)和换行(LF)转换成换行(LF),而在检出代码时把换行(LF)转换成回车(CR)和换行(LF)。



#win下 提交时转换为LF,检出时转换为CRLF
$ git config --global core.autocrlf true

#Linux、Mac 提交时转换为LF,检出时不转换
$ git config --global core.autocrlf input


合并一次MR中的多个commit

  1. git log 查看log,看一下你有几次commit需要合并

2.git rebase -i HEAD~X X代表有几次commit需要合并,如HEAD2,HEAD3

把打开的rebase信息中的第二行的开头pick 修改为f,然后ctrl x,保存,会出现成功的提示哦

  1. git push -f origin 分支名 搞定

几个常用命令



  1. git stash list 查看暂存的所有记录
  2. git stash apply stash{X} 释放第x条记录
  3. git stash drop stash{X} 删除第x条记录

4.git branch -D 分支名 删除本地分支

5.git push origin --delete 分支名 删除远程分支




删除commit

参考链接:删除commit的三种方法



问题解决

  1. 代理问题
用了clash导致的
重新设置代理,将你的代理端口号,设置上去。
我的端口是7890,设置如下:

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
  1. error: RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8) send-pack: unexpected disconnect while reading sideband packet Writing objects: 100% (120/120), 91.63 MiB | 127.00 KiB/s, done. Total 120 (delta 2), reused 0 (delta 0), pack-reused 0 fatal: the remote end hung up unexpectedly
  • 原因可能有文件过大、网速太差、以及一些国外资源因为墙的因素影响等等

解决方式:

1、文件太大,解决方式为git添加 compression 配置项

git config --global core.compression -1

  • compression 是压缩的意思,从 clone 的终端输出就知道,服务器会压缩目标文件,然后传输到客户端,客户端再解压。取值为 [-1, 9],-1 以 zlib 为默认压缩库,0 表示不进行压缩,1…9 是压缩速度与最终获得文件大小的不同程度的权衡,数字越大,压缩越慢,当然得到的文件会越小

2、可以增加git的缓存大小
git config --global http.postBuffer 1048576000 (1G)

3、配置git的最低速和最低速时间

git config --global http.lowSpeedLimit 0
git config --global http.lowSpeedTime 999999 单位 秒



  • 如果是网络问题
git config --global http.version HTTP/1.1
或者
git config --global http.version HTTP/2
  • 上传文件太大
  • 设置大的缓存区
  • 设置长响应时间
  • 浅克隆
git config http.postBuffer 524288000

git clone --depth=1 xxx
  • global配置对当前用户生效,如果需要对所有用户生效,则用–system



项目实在太大…

  • 且你只需要其中的某一个文件或者文件夹

用这个网站:DownGit

在框框里输入你需要的下载的GitHub的文件的地址

git拉一个java项目 git拉取github项目_提交代码_12


具体咋用嘞?

  1. 复制url链接,注意是url链接(浏览器上方框框里的的地址)
  2. url地址粘贴到DownGit的框框里,然后你会发现地址里面会有tree/master
  3. 删除掉tree和master,剩下的路径就是对的
  4. 点击Download就可以下载了

为开源仓库贡献代码

pull request : 拉取请求,我要请求官方仓库拉取我所修改的代码,如果官方同意,我们就可以修改代码了

  • 注意:先要向仓库提交代码

git拉一个java项目 git拉取github项目_git_13

  • 点击新建请求,等待验证通过…

git拉一个java项目 git拉取github项目_Windows_14