版本控制之GitHub亲手实验总结
使用Git的基本方式是:第一种,在remote端创建一个repository,clone到本地,然后在本地把已有文件添加进来/在本地clone的目录下创建新文件,再add 提交等纳入git版本控制。。第二种,直接在本地项目上,通过IDE相关插件,把整个项目提交到remote的一个库中(一般就为这个项目新建一个repository),从而纳入版本控制。
实践可行的方式(Ps:命令行,只要懂得命令正确使用方式,发现是越用越顺手,越用越爽……):
首先,克隆仓库的命令格式为 git clone [url]
例如: git clone https://github.com/jhtlove/study.git
这会在当前目录下创建一个名为study(自己在GitHub上建立的库的名称)的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。如果进入这个新建的 study目录,你会看到项目中的所有文件已经在里边了,准备好后续的开发和使用。
如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
$ git clone git://github.com/schacon/study.git mystudy
唯一的差别就是,现在新建的目录成了 mystudy,其他的都和上边的一样。

上图中,必须进入到含有(隐形文件夹).git文件夹的同一级目录下,才能使用git stash命令。([stæʃ] 存放:经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。“‘储藏”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。你可以重新应用你刚刚实施的储藏,所采用的命令就是之前在原始的 stash 命令的帮助输出里提示的:git stash apply。如果你想应用更早的储藏,你可以通过名字指定它,像这样:git stash apply stash@{2}。如果你不指明,Git 默认使用最近的储藏并尝试应用它:)进入后,命令行显示也会不同,多了一个“(master)”--master分支的显示。

复制本地Java工程文件(贪食蛇)到和.git同一级的文件夹下,

再次查看状态。snake文件夹没有被跟踪,

使用git add . 去添加,再查看状态。

为了避免push时出现的(Non-fast-forward)(出现原因在于:git服务器端的仓库中已经有你现在准备push的本地库中的一部分代码,所以它不允许你直接把你的代码覆盖上去)于是你有2个选择方式:
1,强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容
git push -f
2.每次先从服务器拉取文件到本地,先把git服务器端的东西fetch(取得)到你本地,然后merge后,再push本地的库到服务器:
①git fetch

②git merge

两个操作加起来相当于git pull操作,但是又有区别。例如,如果服务器端有一个文件,如snake文件夹,另一个本地库(StudyRep)下也有一个未跟踪snake文件夹(从workspace中copy的),在StudyRep\study下直接pull会提示必须先merge,如果没有merge,而是进行git add . 操作,把未跟踪的snake文件夹添加进去,再pull,会强制更新本地库中的snake文件。

接着,为了进一步试验pull命令,先直接登录GitHub修改snake下的blood.java文件,然后再pull,执行pull命令后发现本地库中的blood文件确实改变了。接着直接git commit却发现虽然之前有执行git add .命令,但是仍然提示有Untracked files。再git add . 再git commit,再git push 就可以把本地库新增加的工程同步到服务器端。

push之前,先要把changed内容commit到本地库。
直接输入git commit 命令会进入VIM命令行模式,让你输入本次commit内容的一些相关信息。按i(insert)输入;Esc退出编辑,:wq(write and quit)保存退出。

再git push,输入GitHub的用户名和密码,


最后对比服务器端https://github.com/jhtlove/study,发现snake文件夹内容已经同步到服务器端的库了。


要想达到Eclipse中修改了snake代码,又同步到服务器,只需要(如果已有workspa下的snake工程,只需要移除)把testAgain下的git库的snake工程import到Eclipse中,然后修改之后再add + commit + push操作即可(如果有需要可以先fetch+merge)。

.ignore文件的使用
*.class
*.dll
/bin/
#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.lib
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
每次push都要输入用户名和密码,用户名密码的global配置?
附,每次修改提交都要:
git add . (使用git stash 和git status 查看状态,红的不行,绿的就ok了)
git commit
git push
git bash命令行的粘贴不是很好用的话,右击命令行标题栏->属性->选项->快速编辑模式,然后只要右击就可以进行“粘贴”操作。另外使用cd 命令进入某个目录,不能使用反斜杠\,只能使用斜杠/。例如想要进入目录:D:\StudyRep\study,就只能在命令行输入 cd d:/StudyRep/study


为URL取别名,不用每次都输一长串的url

git remote add 后查看.git文件夹下的config文件
[remote "study"]
url = https://github.com/jhtlove/study.git
fetch = +refs/heads/*:refs/remotes/study/*
其余实践注意点:
①ssh-keygen 不要手贱加空格写成:ssh -keygen
②打开,克隆,……:使用克隆比较好建立好本地文件夹与GitHub服务器对应关系,再把自己想要保存的内容放入这个文件夹。
③commit是commit到本机的git库,而push才是同步到github
④其中要使用到GitHub 用户名(jht)和邮箱,登录密码
⑤在Eclipse中使用插件egit很方便,之前用用命令行产生的ssh key,只要在GitHub网站上保存了,取得了本地与GitHub服务器端的连通,在Eclipse中可以不再generate key,使用ignore忽略不想同步的文件。在Git Bash中使用命令 $ ssh -T git@github.com可检测本机与github的连通性。
⑥GIT不会在每一个目录下建立版本控制文件夹,仅在根目录下建立仓库。(svn版本高了,也仅仅在根目录形成 .svn文件)
⑦eclipse中的project也建立git版本控制,当未创建分支,处于NO-HEAD状态,首次提交后,会自动生成master分

⑧Eclipse项目下文件夹中的符号”?”表示此文件夹处于untracked状态,即git没有对此文件进行监控。通过Team -> Add to index可以将文件加入git索引,进行版本监控。也可以通过Team -> Untrack将文件从索引控制中排除。将此次新增的文件commit到仓库中,文件将处于unmodified状态,或者说,这就是一种staged状态。然后修改文件的内容,文件将处于modified状态。
⑨将不需要版本控制的文件,使用gitignore文件过滤掉:打开Navigator窗口,在project根目录中的.gitignore文件中,将需要排除控制的目录写入.gitignore文件中。
十、Team -> Show in history可以查看版本历史提交记录。
Git文档:取得项目的-Git-仓库
版本控制之GitHub亲手实验总结的更多相关文章
- 如何用Github版本控制非Github库
Git的图形化客户端有很多,不同的人可能习惯用不同的客户端.本人更习惯于Github的客户端,因为上Github比较多,同步代码到Github用官方的客户端是最方便的,所以也就更习惯于使用Github ...
- Git版本控制:Github的使用之 多人协作及参与项目
版权声明:本文为博主皮皮http://blog.csdn.net/pipisorry原创文章,未经博主允许不得转载. 目录(?)[-] Git多人协作 从远程库克隆 使用GitHub参与开源项目- ...
- 版本控制之GitHub — — 第一步的理解
GitHub是时下最流行的版本控制的一门“技术”,此之前svn(subversion)也是同样的作用. 至于版本控制:Git是分布式的,而svn是中心式的(或者叫集中式的)版本控制系统,这是两者之间理 ...
- samba共享服务器搭建 亲手实验
一.简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的 ...
- 【Git版本控制】GitHub上fork项目和clone项目的区别
fork:在github页面,点击fork按钮,将别人的仓库复制一份到自己的仓库. clone:直接将github中的仓库克隆到自己本地电脑中 问题1:pull request的作用 比如在仓库的主人 ...
- 201871010109-胡欢欢-实验一-软件工程的准备(初识github及《现代软件工程-构建之法》)
项目 内容 课程班级博客链接 2021年春软件工程课程班(2018级计算机科学与技术) 这个作业要求链接链接 实验一软件工程准备 我的课程学习目标 了解github的基本使用,学习markdown编辑 ...
- 如何通过Git GUI将自己本地的项目上传至Github
最近在学习node.js和react,顺便复习了下AngluarJS相关的东西,写了些小demo想放在GitHub上,之前仅限于只申请了GitHub账号从没用过,今天花半天时间查资料认真学习Githu ...
- androidstudio 配置git和github
git是版本控制工具 github是一个网站,git可以把项目上传至这个网站 1:先下载git,并且安装,一般默认即可,安装成功可以点击电脑右键出现 2:生成id_rsa.pub, 配置账号和邮箱 点 ...
- git github 异常
git :版本控制工具 github:项目托管 git clone failed:git是否安装正确 github commit failed:github 是否账号 / 密码是否正确(密码错误也可以 ...
随机推荐
- QQ音乐flac音乐转MP6格式怎样实现
很多时候我们所下载的音乐格式都不是MP3格式的,用起来都是有局限性的,因为很多播放器都是支持MP3格式的.很多时候为了方便使用,我们就需要将不同的音乐格式转换为MP3格式的.如flac音乐转MP3的问 ...
- MySQL的JDBC驱动源码解析
原文: MySQL的JDBC驱动源码解析 大家都知道JDBC是Java访问数据库的一套规范,具体访问数据库的细节有各个数据库厂商自己实现 Java数据库连接(JDBC)由一组用 Java 编程语言 ...
- 联想y720 淋了雨,字体变得模糊了
显卡驱动没有问题 重新校准显示器问题解决 事实上,可能是某些软件 扰乱了系统字体,请安装上述来重新调整显示器的字体清晰度
- 编译安装spark 1.5.x(Building Spark)
原文连接:http://spark.apache.org/docs/1.5.0/building-spark.html · Building with build/mvn · Building a R ...
- C和C指针小记(十)-函数
1.函数的定义 函数的定义就是函数体的实现. 语法: 类型 函数名(形式参数) 代码块 函数返回类型和函数名分开写是代码风格的问题,现代语言如swift返回值在函数名和参数表的后面,这样使得某些工程工 ...
- 使用flask写移动端API
环境 python 3.7 使用pip 安装falsk pip3 install flask #!flask/bin/python from flask import Flask, jsonify, ...
- 是时候给Xcode瘦身了
我的Xcode 用的很久了,是从6.0之后一直慢慢升级来的. 最近CleanMyMac 一直提示磁盘空间不足... 扫描一下: 用户数据中竟然有接近17G的数据. 打开Finder使用快捷键comma ...
- python-----多线程、线程池、进程池
import threadingimport time ###############################多线程################################------ ...
- 优化网站设计(十):最小化JAVASCRIPT和CSS
前言 网站设计的优化是一个很大的话题,有一些通用的原则,也有针对不同开发平台的一些建议.这方面的研究一直没有停止过,我在不同的场合也分享过这样的话题. 作为通用的原则,雅虎的工程师团队曾经给出过35个 ...
- 解决GP服务产生的结果无法自动发布为地图服务的问题
在ArcGIS for Javascript API或REST API调用GP服务时,常常会遇到这样一种情况:GP服务运行以后,执行成功,也能够生成结果,然而结果并没有直接产生动态的地图服务供API调 ...