上传本地文件到github
自从使用github以来,一直都是在github网站在线上传文件到仓库中,但是有时因为网络或者电脑的原因上传失败。最重要的原因是我习惯本地编辑,完成以后再一起上传github。看过了几个教程,总结出最适合自己的比较简单的方法。
1. github在线上传文件夹
在线上传也可以上传完整的文件夹结构,直接拖拽到上传文件页面的框中即可。
1.1点击上传文件
1.2 直接拖拽
直接拖拽即可上传文件夹及文件夹里面的文件。如果点击 choose your files 就只能上传单个文件。
2. 通过git工具上传本地文件夹(本地项目)
2.1 下载git工具
2.2 下载完成后安装完成,注意在安装过程中可以选择创建桌面快捷方式
2.3 绑定用户
打开git-bash.exe(直接在桌面上点击右键,或者点击开始按钮找到Git Bash)
在打开的GIt Bash中输入以下命令(用户和邮箱为你github注册的账号和邮箱)
-
$ git config --global user.name "hanyuntao"
-
$ git config --global user.email "hanyuntaocn@163.com"
2.4 设置SSH key(git中sshkey有何作用?)
2.4.1 生成ssh key
首先检查是否已生成密钥cd ~/.ssh
,如果返回的ls
有3个文件,则密钥已经生成。
如果没有密钥,则通过
$ ssh-keygen -t rsa -C "hanyuntaocn@163.com"
生成,生成过程中一路按3次回车键就好了。(默认路径,默认没有密码登录)
生成成功后,去对应目录C:Usershyt.ssh里(hyt为电脑用户名,每个人不同)用记事本打开id_rsa.pub,得到ssh key公钥。
2.4.2 为github账号配置ssh key
切换到github,展开个人头像的小三角,点击settings,然后打开SSH keys菜单, 点击Add SSH key新增密钥,填上标题(最好跟本地仓库保持一致)。
接着将id_rsa.pub文件中key粘贴到此,最后Add key生成密钥吧。
2.5 上传本地项目到github
2.5.1 创建一个本地项目
这是我自己创建的几个文件夹及文件。
2.5.2 建立本地仓库
1.首先进入text文件夹
cd d:text
2.执行指令:git init
初始化成功后你会发现项目里多了一个隐藏文件夹.git
3.执行指令:git add .
将所有文件添加到仓库
4.执行指令:git commit -m "提交文件"
双引号内是提交注释。
2.5.3 关联github仓库
1.到github text仓库复制仓库地址
2.执行指令:git remote add origin https://github.com/hanyuntao/text.git
2.5.4 上传本地代码
执行指令:git push -u origin master
2.5.5完成了
可以看到我们的本地项目已经上传到了github上了。
注意:git是不能管理空的文件夹的,文件夹里必须有文件才能上传。(以下解释)
git和 svn不同,仅仅跟踪文件的变动,不跟踪目录。所以,一个空目录,如果里面没有文件,即便 git add
这个目录,另外在别处 check out
的时候,是没有这个空目录的。
只跟踪文件变化,不跟踪目录,这么设计是有原因的。但这会带来一些小麻烦。有时候,确实需要在代码仓库中保留某个空目录。比如测试时需要用到的空目录。下面来看看如何解决。
其实这里有两种情况:
一、目录是空的
这种情况下只需要在目录下创建.gitkeep
文件,然后在项目的.gitignore
中设置不忽略.gitkeep
.gitkeep 是一个约定俗成的文件名并不会带有特殊规则
二、目录中已经存在文件
那就需要首先在根目录中设置!.gitignore
,然后在目标目录也创建一个.gitignore
文件,并在文件中设置
1
2
|
* !.gitignore |
这样就可以在项目中提交空目录了。
在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件)。这个文件每一行保存了一个匹配的规则例如:
1
2
3
4
5
6
7
|
# 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目录下的所有文件 doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt |
规则很简单,不做过多解释,但是有时候在项目开发过程中,突然心血来潮想把某些目录或文件加入忽略规则,按照上述方法定义后发现并未生效,原因是.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
1
2
3
|
git rm -r --cached . git add . git commit -m 'update .gitignore' |
问题:github/gitlab 管理多个ssh key
(转载自:https://www.cnblogs.com/fanyong/p/3962455.html)
以前只使用一个 ssh key 在github上提交代码,由于工作原因,需要再添加一个ssh key在公司的 gitlab上提交代码,下面记录下配置过程,防止遗忘。
说明下我的环境是 Win7 + msysgit + GitBash, 相信 *nux + bash 也是同样的道理。
生成并添加第一个ssh key
第一次使用ssh生成key,默认会在用户~(根目录)下生成 id_rsa, id_rsa.pub 2个文件;所以需要添加多个ssh key时也会生成对应的私钥和公钥。
$ ssh-keygen -t rsa -C "youremail@yourcompany.com"
在Git Bash中执行这条命令一路回车,会在 ~/.ssh/ 目录下生成 id_rsa 和 id_rsa.pub 两个文件,用文本编辑器将 id_rsa_pub 中的内容复制一下粘贴到github(gitlab)上。
生成并添加第二个ssh key
$ ssh-keygen -t rsa -C "youremail@gmail.com"
注意不要一路回车,要给这个文件起一个名字, 比如叫 id_rsa_github, 所以相应的也会生成一个 id_rsa_github.pub 文件。
目录结构如下:
添加私钥
$ ssh-add ~/.ssh/id_rsa
$ ssh-add ~/.ssh/id_rsa_github
如果执行ssh-add时提示"Could not open a connection to your authentication agent",可以现执行命令:
$ ssh-agent bash
然后再运行ssh-add命令。
# 可以通过 ssh-add -l 来确私钥列表
$ ssh-add -l
# 可以通过 ssh-add -D 来清空私钥列表
$ ssh-add -D
修改配置文件
在 ~/.ssh 目录下新建一个config文件
touch config
添加内容:
# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github
测试
$ ssh -T git@github.com
输出
Hi user! You've successfully authenticated, but GitHub does not provide shell access. 就表示成功的连上github了
git上存项目文件的坑Permission denied, please try again.
今天使用gitlab上存项目文件。
发现配置了ssh,还是在push的时候,需要输入密码,并且出现如下错误:
Permission denied, please try again.
我的ssh没有问题,并且密码也没有问题。
问题是因为gitlab的权限中,上存文件不是使用ssh协议,而是使用http协议。
吐了一口老血。
所以如果你出现类似的问题,试下用http协议。
IntelliJ IDEA git 项目检出、更新、提交、解决冲突、取消提交、还原代码
检出项目
- 前提:在开发环境中安装好IntelliJ IDEA和git.
- 打开idea,选择VCS→Checkout from Version Control→Git或者点击VCS→Git→Clone
- 或者
- 出现填写项目详情窗口
- 从gitlab官网复制远程地址
- 可以选Test按钮测试远程服务是否可用,出现success为服务正常,之后选择相应项目类型,检出即可
更新项目
更新项目有两种方式第一种为更新当前窗口下的整个项目
- 第二种为更新相应文件,文件右键Git→Repository→Pull,出现更新详情窗口
- 选择Pull
- 窗口左下方出现本次更新的内容
提交文件
新建TestController测试类
- 文件右键选择add,表示文件交给git托管
- 选择文件右键Git→Commit file ,提交文件
- 左上角会默认比对出本地仓库和远程仓库的区别,勾选文件前的单选框提交相应文件,左侧中部为备注框,选择Commit and push (提交)
- 选择文件右键Git→Repository→Push 上传文件
解决冲突
- 当在本地修改的文件,别人也修改了且已提交到了远程服务器,这时需要解决冲突。为了模拟这个场景,对TestController这个方法同时修改服务器代码和本地代码。修改完成后提交文件
- 填写备注后提交
- 系统会检查出文件有冲突,提示需要合并,出现冲突窗口
- 点击文件,即可进入详情页面
- 详情页面分为三栏,左边为本地版本,中间为修改前版本,右边为服务器最新版本,左右两边代码不可以修改
- 当前冲突页面1所指按钮可以切换冲突位置,2处按钮可以让冲突部分高亮显示,3处可以选择文件是否整体滑动。
- 基于两个版本对中间版本修改后点击apply,即生成最终版本的文件,选择提交
- 这时会提示上传失败,最好将文件重新编译一下,确认无误后重新push即可
- 上传成功!
取消提交
有的时候我们不想push已经commit,可以在idea中进行如下操作取消
首先我们模拟一个测试提交
项目右键选择GIT->Repository->Resrt HEAD
弹出回退页面
在To Commit中填入回退的版本信息, HEAD^ 代表回退到上次提交前,HEAD~n 数字代表往回退的版本数,回退的代码不会丢失,想要提交的话再次commit即可。
还原代码
假如我们还原开发了一半的代码或者自己做的实验性的功能,有什么快速的办法呢
- 第一种就是手动还原,把自己新增的文件挨个删除,右键Git---->Compare with Branch ,把修改项目还原即可。优点是风险小,缺点是操作复杂,无法复原代码
- 第二种是删除本地分支,从远程重新拉一个分支,拉下来的代码是最新版本的。优点是操作简单,缺点是无法复原代码,
- 第三种是最推荐的,操作简单、风险小、代码可复原。idea git有一个仓库可以存储代码,选择项目右键----->Git–>Repository—>Stash Changes ,就会创建一个存储备份,以后需要的时候在Unstash Changes找到相应记录还原即可。也可以选择drop删除存储的代码。