使用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的),在StudyRepstudy下直接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:StudyRepstudy,就只能在命令行输入 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-仓库