重要:远程分支是一些无法移动的本地分支,本地分支,本地分支,三遍!是对远程库中分支的索引,只有在git进行网络交互时才会更新,用 (远程仓库名)/(分支名) 这样的形式表示远程分支
一、基础命令1
1 修改全局名称和邮箱,可用其他命令修改单独库
git config --global user.name "xxx"
git config --global user.email "xxx"
2 在需要成为仓库的目录下,初始化git文件仓库
git -init
3 查看git仓库当前状态 有相关提示指令
git status
4 添加到暂存库,提交(并写有意义的提交提示)
git add fileName
git commit -m "xxx"
5 查看当前状态后,若有修改,可查看指定文件发生了什么修改变化
注意:在文件未git add时,若对文件修改了多次,使用git diff 时,只会比较最后一次修改和最后提交部分的不同,中间修改不记录
git diff fileName (默认把当前工作空间最新的和最新的版本库中内容进行比较)
其他形式:把当前工作空间(可以是暂存区)最新的和指定版本库中的内同进行比较
git diff sha1值或head^等 -- fileName ,其中sha1值或head^等为指定的版本库
小结:
随时查看git状态,用git status,查看哪个文件本怎么修改 用git diff fileName
----------------------------------------------------------------------------------------------------
二、基础命令2
1 显示从最近到最远的提交情况。
git log(sha1/author/date/提示)
git log --pretty=oneline 一行信息展示(sha1/提示)
2 跳到之前某个已经提交的版本(上个/上上个/前100个)
git reset --hard HEAD/HEAD^/HEAD^^/HEAD~100
git reset --hard 版本号(可以写前面几个字母数字 git自动查找) 可以跳到任意一个指定版本号的版本,故可前进和回退到指定版本
注意:此时需要知道确定的版本号(sha1值)。
3 若已经关闭shell,无法知道某个版本sha1值,如何回退? 需要查看commit和reset的相关操作 ,找到某个版本号
git reflog
小结:
'在git 中各个版本之间来回,改变的知识head指针指向的某个版本,速度极快。
HEAD表示当前版本 , HEAD^表示上一个, HEAD^^上上一个,HEAD~100上100个版本
跳到指定版本命令:git reset --hard commit_id
回退前需要查看历史提交记录(从最近到最远)git log /git log --pretty=oneline
回到未来,需要查看命令历史 git reflog
----------------------------------------------------------------------------------------------------
三、基础命令3
1 对工作区(非暂存区)修改的文件进行撤销 (注意和git reset --hard head^/sha1有区别 这个是直接回退到某个commit版本)
此处 --不能丢失,否则为切换分支命令, 这里撤销有两种情况:1)暂存区中没有,撤销后回到最新的commit版,2)
暂存区中有,则撤销后回到暂存区中的版本
git checkout -- fileName
2 暂存区的修改回退到工作区
git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD
时,表示最新的版本。
git reset head fileName
注意:若把文件改好了,从暂存区提交,此时想更改,可以通过git reset --hard head^回退到上个版本。
但是若已经上传到了远程,那就完蛋了。
小结:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考git reset --hard submit_id,不过前提是没有推送到远程库。
----------------------------------------------------------------------------------------------------
四、基础命令4
说在前:
版本库1----->已修改未进暂存区----->已进入暂存区----->已修改未进暂存区
git reset --hard commit_id 回退到不同版本 也可git reset head fileName 从暂存区中撤销,回到工作区
git add fileName进去添加暂存区 git rm fileName进入删除暂存区
git checkout-- fileName 其实是用版本库或暂存区里的版本替换工作区的版本。添加时用此命令表示退回到最近的暂存区或版本库,误删除时用此命令,表示还原文件退到删除之前的 最近的暂存区或者版本库中。
1 删除与误删, 删除情况rm和add增加的情况类似,删除也有一个删除暂存区
在文件夹中删除一个文件之后有2中情况:
1)确实要删除,rm fileName,git rm fileName 进入删除暂存区; git commit -m "delete fileName" 即可彻底从git中删除,无法恢复
2)已经在文件夹中误删,但git中未删, git checkout-- fileName 后有4种情况(根据文件的修改情况如上图分类):会进入最近的版本库或者暂存区,未在版本库或暂存区中的修改会丢失。
注意:不能对进入删除暂存区(git rm fileName)中的文件直接使用git checkout-- fileName进行恢复,必须先从删除暂存区中退回到删除工作区git reset head fileName,后再git checkout-- fileName进行恢复
一句话,只要没有从git中彻底git rm,git commit删除,都可以进行恢复操作,恢复到文件之前的版本
---
不删除文件夹中文件,只是删除git中,git rm --cached fineName
----------------------------------------------------------------------------------------------------
五、基础命令5
1 在本地git仓库文件夹下,添加远程库:
git remote add origin git@github.com:feiwang1991/learnGit.git
此命令后,origin是git的默认远程仓库名称,
2 第一次推送到远程仓库,-u参数 不但会把本地的master分支推送到远程新的master分支,还会把本地master和远程master分支关联起来
git push -u origin master
此时,只要本地做了修改提交后,即可使用git push origin master,推送到远程
小结:
要关联一个远程库,使用命令:git remote add origin git@服务器地址:path/repo-name.git
关联后,使用 git push -u origin master 第一次推送master分支的所有内容
在每一次本地提交后,可git push origin master 只要有必要,就可推送修改。
git可以不需要联网时,在本地提交,但是svn需要联网才能提交,只能通过网络提交,git可以有网络时再一次性提交
----------------------------------------------------------------------------------------------------
六、基础命令6
通常最好的方式是先在远程建立一个远程库,然后克隆到本地
1 从远程仓库克隆一个仓库到本地
git clone git@github.com:feiwang1991/gitSkills.git
小结:
克隆的时候使用git clone命令
git支持多种协议,其中git方式默认支持ssh协议,速度最快,当然也可以使用https协议,这个每次需要输入口令,速度较慢。
----------------------------------------------------------------------------------------------------
七、基础命令7
1 创建分支
git branch xxx
2 切换分支
git checkout xxx
3 创建并切换分支,相当于1和2的两个效果。
git checkout -b xxx
4 查看当前分支
git branch
5 合并指定分支到当前分支
git merge xxxbranch
6 删除分支
git branch -d xxx
小结:
Git鼓励大量使用分支,速度极快,且安全
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建并直接切换到分支:git checkout -b <name>
合并某个分支到当前分支:git merge <name>
删除某个分支:git branch -d <name>
----------------------------------------------------------------------------------------------------
八、基础命令8
在当前分支中合并某个分支用git merge xxx ,分支合并有fast-forward ,这种不需要解决冲突。 另一种是会产生冲突,此时需要在冲突文件中,手动解决冲突,然后git add,git commit即可
注意:冲突解决后,其他分支仍在原始位置,并没有跟进,需要删除分支
1 查看分支合并情况图
git log --graph --pretty=oneline --abbrev-commit
----------------------------------------------------------------------------------------------------
九、基础命令9
合并分支时,如果可以git会使用fast-forward方式,如果删除分支后,会丢失分支信息,
若要强制禁止使用此中方式,可以git merge --no-ff -m <name>方式,git在merge时会产生一个新的commit,这样从历史上就可以看出分支信息。
1 禁止使用fast-forward方式
git merge --no-ff -m "" <name>
分支策略:
git开发时,应该注意几个原则。master分支时最稳定的分支,一般不在上面开发,master分支用于发布新的稳定版本。
dev分支用于开发任务,每个小伙伴从dev中弄一个自己的分支,ok了就往dev上合并就可以了
----------------------------------------------------------------------------------------------------
十、基础命令10
BUG分支:当出现bug时,如紧急接到issue-101BUG,我们此时在dev分支上进行新功能开发,且暂时有许多在暂存区和工作区的文件未提交,暂时无法写完,怎么办?
需要对当前dev环境进行存档,以一个十分干净的环境修改bug,这很重要(用之前稳定的版本修改bug),若在master上修改bug,则从master出分支,完成后合并bug,之后切换并还原dev现场存档,继续开发等工作。
1 将工作线程存储起来
git stash
2 查看当前分支中所有存档的现场
git stash list
3 恢复现场
git stash apply
4 恢复后删除现场
git stash drop
5 恢复并删除现场存档,等于3和4两步操作
git stash pop
6 可以多次stash,恢复时候可以恢复指定stash (查看用git stash list)
git stash apply <stash@{0}>
小结:
当有bug时,我们通过创建bug分支修复bug,然后修复bug,然后合并
当手头工作没完成时,我们把现场保存一下git stash,然后去修复bug,完成后恢复现场继续工作
----------------------------------------------------------------------------------------------------
十一、基础命令11
1 如果要丢掉一个没有合并过的分支,如用来开发新功能的feature分支,每次开发新功能需要创建一个feather分支,即不能正常删除,会提示丢失数据
可以强行删除 git branch -D <name>
十二、基础命令12
master
分支是主分支,因此要时刻与远程同步;dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
1 从远程仓库克隆到本地,git会直接关联本地master分支和远程master分支,且将远程名称默认为origin
git clone git@github.com:feiwang1991/learnGit.git
2 在本地git仓库文件夹下,添加远程库:
git remote add origin git@github.com:feiwang1991/learnGit.git
此命令后,origin是git的默认远程仓库名称,
3 第一次推送到远程仓库,-u参数 不但会把本地的master分支推送到远程新的master分支,还会把本地master和远程master分支关联起来
git push -u origin master,此处的origin是远程库名称,master是本地分支的名称
git push origin master 意思为将本地master分支内同推送到远程Origin中对应的分支中去
十三、基础命令13 关于pull push merge rebase fetch区别
1 git clone url 之后默认远程仓库名字 origin
2 git remote -v 查看远程仓库名称 url
3 git remote add name url 添加远程仓库
4 git fetch remote-name 抓取远程仓库的所有本地没有的信息,可抓取所有分支,之后可以对其合并或者查看
如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin
会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
如果设置了某个分支用于跟踪某个远端仓库的分支(参见下节及第三章的内容),可以使用 git pull
命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。在日常工作中我们经常这么用,既快且好。实际上,默认情况下git clone
命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行git pull
,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。
5 git push remote-name local-branch-name
项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库。实现这个任务的命令很简单: git push [remote-name] [branch-name]
。如果要把本地的 master 分支推送到origin
服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字).如果在你推数据前,已经有其他人推送了若干更新,那 你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,合并到自己的项目中,然后才可以再次推送。
6 git remote show remote-name 查看某个远程仓库的详细信息 如push pull分支信息
7
它告诉我们,运行 git push
时缺省推送的分支是什么(译注:最后两行)。它还显示了有哪些远端分支还没有同步到本地(译注:第六行的caching
分支),哪些已同步到本地的远端分支在远端服务器上已被删除(译注:Stale tracking branches
下面的两个分支),以及运行git pull
时将自动合并哪些分支(译注:前四行中列出的 issues
和 master
分支)。
8 git remote rename old-name new-name 给远程仓库重名了
git remote rm remote-name 移除远程仓库
9 git branch -v 查看每个分支最后提交的情况
git branch --merged/ --no-merged看哪些分支已经被/没有并入到当前分支
10 重要:假设你们团队有个地址为 git.ourcompany.com 的 Git 服务器。如果你从这里克隆,Git 会自动为你将此远程仓库命名为origin,并下载其中所有的数据,建立一个指向它的 master 分支的指针,在本地命名为origin/master,但你无法在本地更改其数据。接着,Git 建立一个属于你自己的本地master 分支,始于 origin 上 master分支相同的位置,你可以就此开始工作
一次 Git 克隆会建立你自己的本地分支 master 和远程分支 origin/master,它们都指向 origin/master 分支的最后一次提交。
http://blog.jobbole.com/25877/
如果你在本地 master 分支做了些改动,与此同时,其他人向 git.ourcompany.com 推送了他们的更新,那么服务器上的master 分支就会向前推进,而于此同时,你在本地的提交历史正朝向不同方向发展。不过只要你不和服务器通讯,你的 origin/master 指针仍然保持原位不会移动(见图 3-23)。
图 3-23. 在本地工作的同时有人向远程仓库推送内容会让提交历史开始分流。
可以运行 git fetch origin 来同步远程服务器上的数据到本地。该命令首先找到 origin 是哪个服务器(本例为git.ourcompany.com),从上面获取你尚未拥有的数据,更新你本地的数据库,然后把 origin/master 的指针移到它最新的位置上(见图 3-24)。
图 3-24. git fetch 命令会更新 remote 索引。
11 推送本地分支 重要
如果你有个叫 serverfix 的分支需要和他人一起开发,可以运行 git push (远程仓库名) (本地分支名): git push origin serverfix
==git push origin serverfix:serverfix
这其实有点像条捷径。Git 自动把 serverfix 分支名扩展为 refs/heads/serverfix:refs/heads/serverfix,意为“取出我在本地的 serverfix 分支,推送到远程仓库的 serverfix 分支中去”。不过一般使用的时候都可以省略它。也可以运行 git push origin serverfix:serferfix 来实现相同的效果,它的意思是“上传我本地的 serverfix 分支到远程仓库中去,仍旧称它为 serverfix 分支”。通过此语法,你可以把本地分支推送到某个命名不同的远程分支:若想把远程分支叫作awesomebranch,可以用 git push origin serverfix:awesomebranch 来推送数据。接下来,当你的协作者再次从服务器上获取数据时,他们将得到一个新的远程分支 origin/serverfix:
git fetch origin
值得注意的是,在 fetch 操作下载好新的远程分支之后,你仍然无法在本地编辑该远程仓库中的分支。换句话说,在本例中,你不会有一个新的serverfix 分支,有的只是一个你无法移动的 origin/serverfix 指针。如果要把该内容合并到当前分支,可以运行 git merge origin/serverfix。如果想要一份自己的 serverfix 来开发,可以在远程分支的基础上分化出一个新的分支来:
git checkout -b serverfix origin/serverfix这会切换到新建的 serverfix 本地分支,其内容同远程分支 origin/serverfix 一致,这样你就可以在里面继续开发了。我们克隆时候,不需要自己新建本地master分支,会自动创建
12 跟踪远程分支 重要
从远程分支 checkout 出来的本地分支,称为_跟踪分支(tracking branch)_。跟踪分支是一种和远程分支有直接联系的本地分支。在跟踪分支里输入git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
在克隆仓库时,Git 通常会自动创建一个名为 master 的分支来跟踪 origin/master。这正是git push 和 git pull 一开始就能正常工作的原因。当然,你可以随心所欲地设定为其它跟踪分支,比如origin 上除了 master 之外的其它分支。刚才我们已经看到了这样的一个例子:git checkout -b [分支名] [远程名]/[分支名]。如果你有 1.6.2 以上版本的 Git,还可以用–track 选项简化:
git checkout --track origin/servfix
要为本地分支设定不同于远程分支的名字,只需在前个版本的命令里换个名字
git checkout -b sf origin/serverfix 现在你的本地分支 sf 会自动向 origin/serverfix 推送和抓取数据了。
13 删除远程分支
如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放稳定代码的地方),可以用这个非常无厘头的语法来删除它:git push [远程名] :[分支名]。如果想在服务器上删除serverfix 分支,运行下面的命令:git push origin :serverfix
咚!服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。
14分支的合并 重要
http://blog.jobbole.com/25877/ 参考其合并操作
切换到次分支中,在次分支中git rebase master(主要分支),就可以把次分支做成补丁在朱分支中重做,此时产生一个新的提交成为主分支的直接下游,当前次分支指针指向这个新的提交,此时主分支还在原始位置。只需对主干进行一次快进合并即可
git merge 次分支,是在主分支中进行的,把次分支合并进当前主分支,git rebase 主分支,是在次分支中进行的,合并入主分支,次分支指针前进
虽然最后整合得到的结果没有任何区别,但衍合能产生一个更为整洁的提交历史。请注意,合并结果中最后一次提交所指向的快照,无论是通过衍合,还是三方合并,都会得到相同的快照内容,只不过提交历史不同罢了。衍合是按照每行的修改次序重演一遍修改,而合并是把最终结果合在一起。
git rebase --onto master server client 把client上的东西跳过server在master上重做一遍
重要:”我们可以直接把 特性分支衍合到主分支,而不用手工切换到 特性分支后再执行衍合操作 — git rebase [主分支] [特性分支] 命令会先取出特性分支server,然后在主分支 上重演:
之后再在切换到主分支上进行git merge 特性分支 快速前进即可
如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些尚未公开的提交对象,就没问题。如果衍合那些已经公开的提交对象,并且已经有人基于这些提交对象开展了后续开发工作的话,就会出现叫人沮丧的麻烦。
小结:
关于重要的几个概念:
1 git中会把远程仓库中的分支通过git fetch remote-name 拉所有分支到本地 ,这就是远程分支 remote-name/branch-name表示。远程分支只用来拉数据(不能直接更改数据),和本地的分支是两回事,本地分支可通过git checkout -b 本地分支名 remote-name/remote-branch 的方式(或git checkout --track 远程名/分支名)产生一个和远程分支同起点的跟踪分支,clone的话,git可以直接产生origin/master的远程分支和master的本地跟踪分支,在跟踪分支可直接git push ,git pull
2 远程分支是不能更改数据的,只可以从远程git fetch name,可以通过远程分支对应的跟踪分支进行push数据即可
3 git rebase 只能必须只合并没有共享过的内容,不然会丢失内容,造成混乱
4 跟踪分支有个方便之处就是可以直接使用git pull git push, 也可不需要,我们写满 git push remote-name branch-name、git pull remote-name branch-name也可以
十四、基础命令14
标签就是给对应的commit版本一个好记住的名字,而已。
1 打标签,切换到需要打的分支上,若直接打标签 git tag <name>
git tag v1.0 就是在最新的提交上打标签
2 查看已经打的标签
git tag
3 若想在之前提交的版本上打tag,可以先查看之前commit的版本号码,根据git tag <name> <commit_id>
git tag v0.3 3ffr4
4 查看某个标签对应版本的具体信息
git show tag-name
5 可以打具有说明的标签 -a是标签名 -m是说明
git tag -a <name> -m "xxx" commit_id
6 删除标签
git tag -d <name>
7 推送某个标签到远程
git push origin <tag-name>
8 一次性推送所有尚未推送到远程的标签到远程
git push origin --tags
9 删除标签 ,要先从本地开始删除 git tag -d name, 再从远程删除
git push origin :refs/tags/v0.1
小结:
命令
git push origin <tagname>
可以推送一个本地标签;命令
git push origin --tags
可以推送全部未推送过的本地标签;命令
git tag -d <tagname>
可以删除一个本地标签;命令
git push origin :refs/tags/<tagname>
可以删除一个远程标签。
十五、基础命令15
1 .gitignore文件 ,直接放在工作目录下 且为了起作用必须提交到git
里面直接写 *.txt 等或者 a.b就可以
2 可以使用别名替代常命令
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
初识git--基础命令的更多相关文章
-
学习 git基础命令
缘起 年后到了新公司,由于个人意愿到了一个海外的项目组,除了自己从Java技术栈转了C#技术栈外,很多技术都是第一次使用,学习压力不小啊. 自己也就先从常用的技术开始学起,比如C#,AngularJS ...
-
常用 git 基础命令
git config --global credential.helper store记住密码 git config user.name xxx配置帐号 git config user.email x ...
-
Git基础命令的使用——详细教程2
Git安装默认完成后,在左面点击鼠标右键,鼠标右键菜单中会多出来两个选项: a) Git GUI Here <—> 图型界面模式 b) Git Bash Here <—> ...
-
[git] 基础命令笔记
--内容整理自廖雪峰的GIT教程-- git status 查看当前工作区状态,显示未跟踪的文件以及未上传的修改记录 git init 使当前文件夹变成Git可以管理的仓库 git add xxx 将 ...
-
git基础命令详解
一些必须要知道的概念 git的三个工作区域:工作目录.暂存区.git仓库. 工作目录:其实就是本地文件磁盘上的文件或目录: 暂存区:是一个文件,保存了下次提交的文件列表信息,一般在git仓库目录中: ...
-
git 基础命令 学习总结
首先介绍一个git 里工作流的概念: 你的本地仓库由 git 维护的三棵“树”组成.第一个是你的 工作目录,它持有实际文件:第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动:最后是 H ...
-
git 基础命令
1.git init git 初始化仓库 2.git add . git 添加全部文件 3.git add xxx.txt git 添加单独文件 4.git commit -m "提交的 ...
-
Git基础命令的使用
当前git版本: git version 2.9.2.windows.1 1.创建一个能与git服务器连接的本地git库 本地: git init git status (-s) git add . ...
-
Git基础命令使用(个人总结)
个人在开发中整理常用的git命令,相信很多人会需要到的. 全局配置信息: git config --global user.name "Your name" git config ...
-
git基础命令学习总结
git版本升级 git clone git://git.kernel.org/pub/scm/git/git.git 列出所有 Git 当时能找到的配置 git config --list git c ...
随机推荐
-
vue-router2使用
条件:紧接前面vue.js开发环境搭建 1.在cmd输入:npm install vue-router,回车,等待,安装对应版本router: 2.在入口文件用 import vueRouter fr ...
-
json和pickle
Pickle序列化 用于序列化的两个模块 json,用于字符串 和 python数据类型间进行转换 pickle,用于python特有的类型 和 python的数据类型间进行转换 python的pic ...
-
Python学习02 列表 List
Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...
-
Oracle Purchasing QUESTIONS AND ANSWERS
Topic Summary Topic: CORRECTIONS: Corrections Topic: DELIVER: Receiving Delivery Topic: DROPSHIP: Dr ...
-
使用AChartEngine第一步:在项目中配置AChartEngine环境
1. 从AChartEngine官网上下载acharengine的jar文件包. 地址:https://code.google.com/p/achartengine/downloads/list 2. ...
-
struts2拦截器与过滤器
转载:http://www.cnblogs.com/JohnLiang/archive/2011/12/15/2288376.html 过滤器,是在java web中,你传入的request,resp ...
-
Android Map新用法:MapFragment应用
MapView ,MapActivity 这种的局限在于,必须要继承MapActivity,否则无法使用MapView,但是,MapFragment 这种的局限在于,必须要安装Google Play ...
-
java多线程(同步与死锁问题,生产者与消费者问题)
首先我们来看同步与死锁问题: 所谓死锁,就是A拥有banana.B拥有apple. A对B说:你把apple给我.我就把banana给你. B对A说:你把banana给我,我就把apple给你. 可是 ...
-
【解惑】剖析float型的内存存储和精度丢失问题
问题提出:12.0f-11.9f=0.10000038,"减不尽"为什么? 现在我们就详细剖析一下浮点型运算为什么会造成精度丢失? 1.小数的二进制表示问题 首先我们要搞清楚下面两 ...
-
c++/cmake /Android NDK 动态链接库交叉编译笔记
项目使用cmake管理,由于项目的需要,核心代码要求跨 Linux/Windows/Android 三平台.Windows和Linux都好说,但Android NDK费了一番功夫还是没有解决.临时的解 ...