标签: GitHub

GitHub入门之一:使用github下载项目

GitHub入门之一:使用github下载项目

git作为目前比较流行的版本控制系统,被各个互联网公司广泛使用着。目前国外的网站有GitHub,国内的有CSDN和OSCHINA的git。

使用git可以很方便地进行多人协作和版本控制。作为一个入门小白,我先从我的角度来和大家一起看看如何使用github,我注重操作,不注重原理。

如果想深入学习git,建议看类似git入门这样的文档

 

这篇讲如何使用其它人的代码,*初,github被我当作一个下载开源库的好地方。当我做android需要一个actionbar、chart、menu的时候,git上总是能找到。这里不乏有世界上*好的程序员们在工作。为了让我们的开发更快,需要使用他们做好的项目

 

1、打开github,*上方会有一个搜索框,在里面输入我们可能用到的库,比如chart

%title插图%num

 

2、会搜索出github中所有公开的chart项目:

%title插图%num

 

3、由于我是做安卓的,在这里我选择JAVA

%title插图%num

我们看到这里给出了让我们满意的筛选,而且有472个项目之多,选择*个:

 

4、Android-charts

打开Android-Charts后我们看到了一个项目的界面:主界面是项目的名称和代码树,右侧是项目的一些属性(话题、提交次数、人数等等),下方是作者对项目的介绍:

%title插图%num

 

在代码结构的区域,可以通过点击文件直接查看当前的文件内容。

项目介绍区域,作者会对项目的功能,使用方法进行介绍。

如果想直接下载这个项目的压缩包,点击右下角的DownLoad ZIP;

如果想直接把项目导入到Eclipse里(因为我做android嘛),打开Eclipse,选择File–>Import–>Projects from git –> URI ,输入HTTPS网址–next

%title插图%num

选择一个分支:如Master — > next –>选择保存目录,eclipse会自动帮我们下载内容

%title插图%num

*后我们把项目导入就大功告成了!~

 

这样的好处是会有git的地址,如果作者某天更新了程序,我们可以很方便地更新我们的本地git库。

 

GitHub一夜爆火的阿里高并发技术小册究竟有什么魅力?

关于技术人如何成长的问题,一直以来都备受关注,因为程序员职业发展很快,即使是相同起点的人,经过几年的工作或学习,会迅速拉开*大的差距,所以技术人保持学习,提升自己,才能够扛得住不断上赶的后浪,也不至于被“拍死”在沙滩上。

近日,经过一朋友的透露,Alibaba也首发了一份限量的“Java成长手册”,里面记载的知识点非常齐全,看完之后才知道,差距真的不止一点点!

手册主要是将Java程序员按照年限来进行分层,清晰的标注着Java程序员应该按照怎样的路线来提升自己,需要去学习哪些技术点。

%title插图%num

0-1年入门

  • Java基础复盘
    (面向对象+Java的超类+Java的反射机制+异常处理+集合+泛型+基础IO操作+多线程+网络编程+JDK新特性)
  • Web编程初探
    (Servlet+MySQL数据库+商品管理系统实战)
  • SSM从入门到精通
    (Spring+SpringMVC+Mybatis+商品管理系统实战-SSM版)
  • SpringBoot快速上手
    (SpringBoot+基于SpringBoot的商品管理系统实战)
  • 零距离互联网项目实战
    (Linux+Redis+双十一秒杀实战系统)

%title插图%num

%title插图%num

1-3年高工

  • 并发编程进阶
    (并发工具类实战+CAS+显示锁解析+线程池内部机制+性能优化)
  • JVM深度剖析
    (理解运行时数据区+堆外内存解读+JDK+内存泄漏问题排查+Arthas+GC算法和垃圾回收器+类加载机制等)
  • MySQL深度进阶
  • 深入Tomcat底层
    (线程模型+性能调优)

%title插图%num

%title插图%num

3-5年资深

  • 数据库
    (调优+事务+锁+集群+主从+缓存等)
  • Linux
    (命令+生产环境+日志等)
  • 中间件&分布式
    (dubbo+MQ/kafka、ElasticSearch、SpringCloud等组件)

%title插图%num

%title插图%num

5-7年架构

  • 开源框架
    (Spring5源码+SpringMVC源码+Mybatis源码)
  • 分布式架构
    (Zk实战+RabbitMQ+RocketMQ+Kafka)
  • 高效存储
    (Redis+mongoDB+MySQL高可用+Mycat+Sharing-Sphere)
  • 微服务架构
    (RPC+SpringBoot+SpringCloud+Netflix+SpringCloudAlibaba+docker+k8s)

解决GitHub访问速度缓慢,延迟高的问题

随着微软大大宣布GitHub针对个人用户的仓库免费,相信每位开发者都感受到了“真香”。

 

%title插图%num

然而因为一些众所周知的原因,国内访问GitHub总会遇到下载速度缓慢、链接意外终止的情况。

%title插图%num

为了更加愉快地使用全球*大同性交友网站上的优质资源,我们来做一些简单的本机上的调整。

通过查看下载链接,能够发现*终被指向到Amazon的服务器(http://github-cloud.s3.amazonaws.com)了。由于国内访问亚马逊网站非常慢,我们需要修改Hosts文件来实现流畅访问。

*步,打开本机上的Hosts文件

首先,什么是Hosts文件?

在互联网协议中,host表示能够同其他机器互相访问的本地计算机。一台本地机有唯一标志代码,同网络掩码一起组成IP地址,如果通过点到点协议通过ISP访问互联网,那么在连接期间将会拥有唯一的IP地址,这段时间内,你的主机就是一个host。

在这种情况下,host表示一个网络节点。host是根据TCP/IP for Windows 的标准来工作的,它的作用是包含IP地址和Host name(主机名)的映射关系,是一个映射IP地址和Host name(主机名)的规定,规定要求每段只能包括一个映射关系,IP地址要放在每段的*前面,空格后再写上映射的Host name主机名 。对于这段的映射说明用“#”分割后用文字说明。

~Windows

Hosts文件的路径是:

C:\Windows\System32\drivers\etc

由于文件没有后缀名,可以利用鼠标右键点击,选择用记事本打开,如下图。

%title插图%num

~Mac

终端内输入:

sudo vim /etc/hosts

打开之后,我们就要向里面追加信息了。

第二步,追加域名的IP地址

我们可以利用https://www.ipaddress.com/ 来获得以下两个GitHub域名的IP地址:

(1) github.com

(2) github.global.ssl.fastly.net

打开网页后,利用输入框内分别查询两个域名:

%title插图%num

先试一下github.com:

%title插图%num

在标注的IP地址中,任选一个记录下来。

再来是github.global.ssl.fastly.net:

%title插图%num

将以上两段IP写入Hosts文件中:

%title插图%num

保存。

第三步,刷新 DNS 缓存

在终端或CMD中,执行以下命令:

ipconfig /flushdns

收工。

现在再来试一下 git clone 命令,是不是可以轻松过百K了? 🙂

解决Github资源无法访问

不是什么原创,就是个人稍微记录一下。

Windows上可以这样办:

上https://www.ipaddress.com查一下raw.githubusercontent.com的ipv4地址,比如我现在查到的是199.232.68.133。

使用管理员权限打开C:/Windows/System32/hosts文件,添加一行

 

199.232.68.133 raw.githubusercontent.com # comments. put the address here 

或者管理员权限开或者给个用户写入权限。然后差不多就行了,可能要重启。

Android错误崩溃拦截

一.问题抛出

  • android运行的时候难免会有一些空指针(NullPointerException)或者下标越界(IndexOutOfBoundsException),用户使用的过程操作某一个按钮的时候,就发生了崩溃.这时候可能还没有到他感兴趣的部分,程序就Crash掉了,因此导致了用户流失
  • 在集成一些第三方库的时候,我们不能修改里面的实现(例如 Gson,FastJson,OkHttp,OkSocket,Glide)等,那么如果他们里面抛出异常如何解决,Glide加载图片之后填充图片时,如果Activity销毁就会造成崩溃,那么我们如何解决?

二.解决效果

%title插图%num

预防崩溃演示效果图.gif

三.解决思路

  • MainLooper一定要保证在崩溃的时候持续Loop
  • 子线程发生崩溃,保证主线程Looper继续Loop
  • 当绘制,测量,布局出现问题导致编舞者Crash时,应该及时处理(关闭当前异常的界面)
  • 生命周期方法发生了异常,在ActivityThread里面hook其中的Instrumentation.进行代理.
  • 对ActivityThread中的mH 变量添加Callback,对于不能再Instrumentation中处理的异常进行再次Catch.*大限度保证不崩溃.

四.成品Library

Github项目地址: https://github.com/xuuhaoo/DefenseCrash (欢迎Star)
集成方法:

  • Please add the code into your project gradle file
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0'

%title插图%num

  • maven { url 'https://dl.bintray.com/xuuhaoo/maven/'}
  • %title插图%num
  • Make sure you already done with above instructions in project gradle
    files, than you need put this into Module build.gradle file
  • //崩溃预防,可以避免空指针等崩溃错误
      compile 'com.tonystark.android:defense_crash:2.0.0'
  • %title插图%num

We provide you two options for choosing:

  • Options 1: You should manually install the defense as following code
  1. public class MyApp extends Application implements IExceptionHandler {
  2. @Override
  3. protected void attachBaseContext(Context base) {
  4. super.attachBaseContext(base);
  5. // step1: Initialize the lib.
  6. DefenseCrash.initialize();
  7. // setp2: Install the fire wall defense.
  8. DefenseCrash.install(this);
  9. }
  10. @Override
  11. public void onCaughtException(Thread thread, Throwable throwable, boolean isSafeMode) {
  12. // step3: Print the error when crashed during runtime.
  13. throwable.printStackTrace();
  14. // step4: Upload this throwable to your crash collection sdk.
  15. }
  16. @Override
  17. public void onEnterSafeMode() {
  18. // We enter the safe mode to keep the main looper loop after crashed.You’d better do nothing here,we just notify you.
  19. }
  20. @Override
  21. public void onMayBeBlackScreen(Throwable throwable) {
  22. // onLayout(),onMeasure() or onDraw() has breaks down,
  23. // it causes the drawing to be abnormal and the choreographer to break down.
  24. // We will notify you on this method,you’d better finish this activity or restart the application.
  25. }
  26. }
  • Options 2: To facilitate some users, we provide a DefenseCrashApplication super class for you to integrate,as following code
  1. public class MyApp extends DefenseCrashApplication {
  2. @Override
  3. public void onCaughtException(Thread thread, Throwable throwable, boolean isSafeMode) {
  4. // step1: Print the error when crashed during runtime.
  5. throwable.printStackTrace();
  6. // step2: Upload this throwable to your crash collection sdk.
  7. }
  8. @Override
  9. public void onEnterSafeMode() {
  10. // We enter the safe mode to keep the main looper loop after crashed.You’d better do nothing here,we just notify you.
  11. }
  12. @Override
  13. public void onMayBeBlackScreen(Throwable throwable) {
  14. // onLayout(),onMeasure() or onDraw() has breaks down,
  15. // it causes the drawing to be abnormal and the choreographer to break down.
  16. // We will notify you on this method,you’d better finish this activity or restart the application.
  17. }
  18. }

 

Git 如何优雅地回退代码

前言


从接触编程就开始使用 Git 进行代码管理,先是自己玩 Github,又在工作中使用 Gitlab,虽然使用时间挺长,可是也只进行一些常用操作,如推拉代码、提交、合并等,更复杂的操作没有使用过,看过的教程也逐渐淡忘了,有些对不起 Linus 大神。

出来混总是要还的,前些天就遇到了 Git 里一种十分糟心的场景,并为之前没有深入理解 Git 命令付出了一下午时间的代价。

先介绍一下这种场景,我们一个项目从 N 版本升到 A 版本时引入了另一项目的 jar 包,又陆续发布了 B、C 版本,但在 C 版本后忽然发现了 A 版本引入的 jar 包有*大的性能问题,B、C 版本都是基于 A 版本发布的,要修复 jar 包性能问题,等 jar 包再发版还得几天,可此时线上又有紧急的 Bug 要修,于是就陷入了进退两难的境地。

*后决定先将代码回退到 A 版本之前,再基于旧版本修复 Bug,也就开始了五个小时的受苦之路。

基础试探


revert

首先肯定的是 revert,git revert commit_id 能产生一个 与 commit_id 完全相反的提交,即 commit_id 里是添加, revert 提交里就是删除。

但是使用 git log 查看了提交记录后,我就打消了这种想法,因为提交次数太多了,中途还有几次从其他分支的 merge 操作。”利益于”我们不太干净的提交记录,要完成从 C 版本到 N 版本的 revert,我需要倒序执行 revert 操作几十次,如果其中顺序错了一次,*终结果可能就是不对的。

另外我们知道我们在进行代码 merge 时,也会把 merge 信息产生一次新的提交,而 revert 这次 merge commit 时需要指定 m 参数,以指定 mainline,这个 mainline 是主线,也是我们要保留代码的主分支,从 feature 分支往 develop 分支合并,或由 develop 分支合并到 master 的提交还好确定,但 feature 分支互相合并时,我哪知道哪个是主线啊。

所以 revert 的文案被废弃了。

Reset

然后就考虑 reset 了, reset 也能使代码回到某次提交,但跟 revert 不同的是, reset 是将提交的 HEAD 指针指到某次提交,之后的提交记录会消失,就像从没有过这么一次提交。

但由于我们都在 feature 分支开发,我在 feature 分支上将代码回退到某次提交后,将其合并到 develop 分支时却被提示报错。这是因为 feature 分支回退了提交后,在 git 的 workflow 里,feature 分支是落后于 develop 分支的,而合并向 develop 分支,又需要和 develop 分支保持*新的同步,需要将 develop 分支的数据合并到 feature 分支上,而合并后,原来被 reset 的代码又回来了。

这个时候另一个可选项是在 master 分支上执行 reset,使用 --hard 选项完全抛弃这些旧代码,reset 后再强制推到远端。

  1. master> git reset –hard commit_id
  2. master> git push –force origin master

但是还是有问题,首先,我们的 master 分支在 gitlab 里是被保护的,不能使用 force push,毕竟风险挺大了,万一有人 reset 到*开始的提交再强制 push 的话,虽然可以使用 reflog 恢复,但也是一番折腾。

另外,reset 毕竟太野蛮,我们还是想能保留提交历史,以后排查问题也可以参考。

升级融合


rebase

只好用搜索引擎继续搜索,看到有人提出可以先使用 rebase 把多个提交合并成一个提交,再使用 revert 产生一次反提交,这种方法的思路非常清晰,把 revert 和 rebase 两个命令搭配得很好,相当于使用 revert 回退的升级版。

先说一下 rebase,rebase 是”变基”的意思,这里的”基”,在我理解是指[多次] commit 形成的 git workflow,使用 rebase,我们可以改变这些历史提交,修改 commit 信息,将多个 commit 进行组合。

介绍 rebase 的文档有很多,我们直接来说用它来进行代码回退的步骤。

  1. 首先,切出一个新分支 F,使用 git log 查询一下要回退到的 commit 版本 N。
  2. 使用命令 git rebase -i N, -i 指定交互模式后,会打开 git rebase 编辑界面,形如:
    1. pick 6fa5869 commit1
    2. pick 0b84ee7 commit2
    3. pick 986c6c8 commit3
    4. pick 91a0dcc commit4
  3. 这些 commit 自旧到新由上而下排列,我们只需要在 commit_id 前添加操作命令即可,在合并 commit 这个需求里,我们可以选择 pick(p) *旧的 commit1,然后在后续的 commit_id 前添加 squash(s) 命令,将这些 commits 都合并到*旧的 commit1 上。
  4. 保存 rebase 结果后,再编辑 commit 信息,使这次 rebase 失效,git 会将之前的这些 commit 都删除,并将其更改合并为一个新的 commit5,如果出错了,也可以使用 git rebase --abort/--continue/--edit-todo 对之前的编辑进行撤销、继续编辑。
  5. 这个时候,主分支上的提交记录是 older, commit1, commit2, commit3, commit4,而 F 分支上的提交记录是 older, commit5,由于 F 分支的祖先节点是 older,明显落后于主分支的 commit4,将 F 分支向主分支合并是不允许的,所以我们需要执行 git merge master 将主分支向 F 分支合并,合并后 git 会发现 commit1 到 commit4 提交的内容和 F 分支上 commit5 的修改内容是完全相同的,会自动进行合并,内容不变,但多了一个 commit5。
  6. 再在 F 分支上对 commit5 进行一次 revert 反提交,就实现了把 commit1 到 commit4 的提交全部回退。

这种方法的取巧之处在于巧妙地利用了 rebase 操作历史提交的功能和 git 识别修改相同自动合并的特性,操作虽然复杂,但历史提交保留得还算完整。

rebase 这种修改历史提交的功非常实用,能够很好地解决我们遇到的一个小功能提交了好多次才好使,而把 git 历史弄得乱七八糟的问题,只需要注意避免在多人同时开发的分支使用就行了。

遗憾的是,当天我并没有理解到 rebase 的这种思想,又由于试了几个方法都不行太过于慌乱,在 rebase 完成后,向主分支合并被拒之后对这些方式的可行性产生了怀疑,又加上有同事提出听起来更可行的方式,就中断了操作。

文件操作

这种更可行的方式就是对文件操作,然后让 git 来识别变更,具体是:

  1. 从主分支上切出一个跟主分支完全相同的分支 F。
  2. 从文件管理系统复制项目文件夹为 bak,在 bak 内使用 git checkout N 将代码切到想要的历史提交,这时候 git 会将 bak 内的文件恢复到 N 状态。
  3. 在从文件管理系统内,将 bak 文件夹下 除了 .git 文件夹下的所有内容复制粘贴到原项目目录下。git 会纯从文件级别识别到变更,然后更新工作区。
  4. 在原项目目录下执行 add 和 commit,完成反提交。

这种方式的巧妙之处在于利用 git 本身对文件的识别,不牵涉到对 workflow 操作。

小结


*后终于靠着文件操作方式成功完成了代码回退,事后想来真是一把心酸泪。

为了让我的五个小时不白费,复盘一下当时的场景,学习并总结一下四种代码回退的方式:

  • revert 适合需要回退的历史提交不多,且无合并冲突的情景。
  • 如果你可以向 master 强推代码,且想让 git log 里不再出现被回退代码的痕迹,可以使用 git reset --hard + git push --force 的方式。
  • 如果你有些 geek,追求用”正规而正统”的方式来回退代码,rebase + revert 满足你的需求。
  • 如果你不在乎是否优雅,想用*简单,*直接的方式,文件操作正合适。

git 真的是非常牛逼的代码管理工具,入手简单,三五个命令组合起来就足够完成工作需求,又对 geeker 们非常友好,你想要的骚操作它都支持,学无止境啊。

吐槽:华为手机的搜索短信问题

这两天,被测试同事的华为荣耀8搞得焦头烂额,在其他手机能正常使用的Uri,在它身上却问题多多,不得不去吐槽国内定制系统…

一开始,我的搜索操作是这样的…
private void query(String keyword) {
Uri searchUri = Telephony.MmsSms.SEARCH_URI.buildUpon().appendQueryParameter(“pattern”, keyword).build();
mQueryHandler.startQuery(0, null, searchUri, null, null, null, null);
}

虽然,这只能模糊搜索信息的内容并不能根据联系人号码去查询,手中的一加、小米手机运行是没问题的,但…华为手机运行后,得到的cursor是null…

%title插图%num
好吧,既然这样,我换个Uri试试…
content://mms-sms/conversations/

先在自己手机测下,看是否可以查询成功…OK,可以,再借同事手机来跑下…结果,崩溃了,日志如下:
android.database.sqlite.SQLiteException: no such column: group_all (Sqlite code 1): , while compiling:
SELECT thread_id, address, body, date, _id FROM (
SELECT thread_id AS tid, date * 1000 AS normalized_date, NULL AS time_body, text_only, NULL AS group_id, ct_t, msg_box, v, retr_txt_cs, ct_cls, NULL AS type, st, NULL AS address, NULL AS person, tr_id, read, m_id, NULL AS body, NULL AS addr_body, m_type, network_type, locked, resp_txt, retr_st, NULL AS error_code, NULL AS group_all, NULL AS reply_path_present, sub, NULL AS risk_url_body, rr, ct_l, NULL AS status, NULL AS subject, _id, m_size, exp, sub_cs, NULL AS group_fail, sub_id, resp_st, date, date_sent, pri, NULL AS group_sent, thread_id, read_status, d_rpt, rpt_a, NULL AS is_secret, m_cls, NULL AS service_center FROM pdu WHERE ((msg_box != 3 AND (m_type = 128 OR m_type = 132 OR m_type = 130))) GROUP BY thread_id HAVING date = MAX(date) UNION SELECT thread_id AS tid, date * 1 AS normalized_date, time_body, NULL AS text_only, group_id, NULL AS ct_t, NULL AS msg_box, NULL AS v, NULL AS retr_txt_cs, NULL AS ct_cls, type, NULL AS st, address, person, NULL AS tr_id, read, NULL AS m_id, body, addr_body, NULL AS m_type, network_type, locked, NULL AS resp_txt, NULL AS retr_st, error_code, group_all, reply_path_present, NULL AS sub, risk_url_body, NULL AS rr, NULL AS ct_l, status, subject, _id, NULL AS m_size, NULL AS exp, NULL AS sub_cs, group_fail, sub_id, NULL AS resp_st, date, date_sent, NULL AS pri, group_sent, thread_id, NULL AS read_status, NULL AS d_rpt, NULL AS rpt_a, is_secret, NULL AS m_cls, service_center FROM sms_secret WHERE ((type != 3)) GROUP BY thread_id HAVING date = MAX(date)) GROUP BY tid HAVING normalized_date = MAX(normalized_date), (OS error – 2:No such file or directory)

无法找到group_all这列…就在这时,我开始强迫症了,Google了整整几小时,找到的资料少之又少,只有在GitHub的一个Issue中看到了相同问题(https://github.com/WhisperSystems/Signal-Android/issues/6198),但是并没有解决方法,好吧,好吧…

于是又试了几个Uri,但还是崩溃报Unrecognized URI!错误…
content://mms-sms/
content://mms-sms/messages/byphone

*后,实在没办法只能放弃彩信的搜索,只允许用户搜索Sms而不是Mms-Sms:
content://sms/inbox

不得不感概:兼容问题,是一个大问题啊!!!

在Android Studio重新上传项目时,遇到报错问题

描述:

在GitHub上面上传项目,但是感觉有些问题,就想删除了重新上传。

但是在Android Studio重新上传项目时,遇到了问题,一直提示“project is already on github”

 

解决方案:

1、关闭Android Studio项目;

 

2、进入到本地项目目录,找到隐藏文件夹.git

%title插图%num

 

进入该文件夹下,找到config文件

删除下面这段内容

[remote "origin"]
    url = https://github.com/AnneHan/slidingMenu.git
    fetch = +refs/heads/*:refs/remotes/origin/*

%title插图%num

 

保存config文件

 

3、重新打开Android Studio,进入VCS->Import into Version Control->Share Project on GitHub,再次上传项目即可。

如何快速实现项目上传至GitHub(详细步骤)

前言:

本文主要讲解如何将Android Studio项目上传至GitHub,在此之前,先介绍几个概念。

Android Studio:是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA,类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。

Git(分布式版本控制系统):是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。

GitHub:是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub。

 

准备:

1、安装Android Studio,并新建一个项目,下载地址

2、需要在本地安装Git版本控制系统,下载地址

3、在GitHub网站上注册一个账号,GitHub官网

 

步骤:

1、先安装Git

下载Git的exe,双击exe,一直next

记录下安装路径,默认安装在D:\Program Files\Git

 

2、将Android Studio与Git关联

打开Android Studio

进入File->Settings->Version Control(展开)->Git

在Path to Git executable栏位输入安装Git的路径,如下图所示:

%title插图%num

 

点击【Test】按钮,若出现Git executed successfully,则说明配置成功,同时也会提示Git的版本号,如下图:

%title插图%num

 

3、配置GitHub登录信息

进入File->Settings->Version Control(展开)->GitHub

在Login/Password栏位输入在GitHub网站注册的账号/密码,如下图:

%title插图%num

 

点击【Test】,提示Connection successful,则说明配置成功

%title插图%num

 

4、上传项目到GitHub

进入VCS->Import into Version Control->Share Project on GitHub,如下图:

%title插图%num

 

若是*次提交该项目,会弹出以下窗口,需填写项目名称以及描述,如下图:

%title插图%num

 

点击【Share】,如果下面没有问题,会弹出以下窗口

这里罗列出需要提交的类,以及各种资源配置文件等

%title插图%num

 

点击【OK】

在这一步出现了错误,错误如下:

%title插图%num

看了下提示信息,原来是Git没有配置全局用户的原因

解决方案:

(具体的解决方案可以参考我的另一篇博文:解决提交项目到GitHub,报错Please tell me who you are的问题)

找到Git安装目录下的Git Bash,运行后输入下面两行代码即可

git config --global user.email "you@example.com"  
git config --global user.name "Your Name"

%title插图%num

 

继续继续上传,若上传成功,在Android Studio右上角会有如下提示:

%title插图%num

 

5、此时,进入到你的GitHub网址,便可以看到提交成功的项目

%title插图%num

 

后续操作 之 项目更新:

当项目中需要新增类,或者修改类的时候,需要将其代码更新至GitHub中

1、新增类时:

在创建类时,就会提示你是否需要加入Git,如下图:

%title插图%num

 

点击【Yes】,该类就会加入到Git

%title插图%num

 

选择该类,右击,Git->Commit File,弹出下面窗口

%title插图%num

 

输入commit message,点击【Commit】,会弹出以下警告信息

忽略信息,继续点击【Commit】

%title插图%num

 

再次右击该类,Git->Repository->Push,如下图:

%title插图%num

 

在弹出的窗口中,继续点击【Push】

%title插图%num

 

此时,在GitHub中,便可以看到新增的类了

%title插图%num

 

2、修改类时:

右击需要修改的类,Git -> Add,如下图:

%title插图%num

 

后续的操作,便和新增类时的操作相同,不再赘述。

 

以上便是把一个Android Studio项目上传至GitHub的完整步骤。

解决提交项目到GitHub时,出现报错问题

解决提交项目到GitHub,报错Please tell me who you are的问题

描述:

在*次提交项目到GitHub时,出现了以下问题

%title插图%num

看了一下错误原因:Run git config –global user.email “you@example.com” git config –global user.name ”

原来是Git没有配置全局用户的原因

 

解决方案:

找到Git安装目录下的Git Bash,运行后输入下面两行代码即可

(备注:这里的name and email,*好还是输入注册GitHub时的name and email,因为这里决定了你往GitHub提交代码之后,是否能够获得贡献值)

git config --global user.email "you@example.com"  
git config --global user.name "Your Name"

%title插图%num

 

扩展:

以上方法配置的是全局的用户名和邮箱,如果没有单独为某个项目进行配置的话,那么所有提交的项目都将使用全局的用户名和邮箱。

单独为项目配置的方法如下:

(备注:采用就近原则,当同时设置全局用户名/邮箱,和单独为项目配置用户名/邮箱时,会默认使用单独为项目配置的用户名/邮箱)

1、进入到本地项目目录,找到隐藏文件夹.git

2、进入该文件夹下,找到config文件

3、在该文件下,添加以下代码

[user]
    name = XXX
    email = XXXX

 

友情链接: SITEMAP | 旋风加速器官网 | 旋风软件中心 | textarea | 黑洞加速器 | jiaohess | 老王加速器 | 烧饼哥加速器 | 小蓝鸟 | tiktok加速器 | 旋风加速度器 | 旋风加速 | quickq加速器 | 飞驰加速器 | 飞鸟加速器 | 狗急加速器 | hammer加速器 | trafficace | 原子加速器 | 葫芦加速器 | 麦旋风 | 油管加速器 | anycastly | INS加速器 | INS加速器免费版 | 免费vqn加速外网 | 旋风加速器 | 快橙加速器 | 啊哈加速器 | 迷雾通 | 优途加速器 | 海外播 | 坚果加速器 | 海外vqn加速 | 蘑菇加速器 | 毛豆加速器 | 接码平台 | 接码S | 西柚加速器 | 快柠檬加速器 | 黑洞加速 | falemon | 快橙加速器 | anycast加速器 | ibaidu | moneytreeblog | 坚果加速器 | 派币加速器 | 飞鸟加速器 | 毛豆APP | PIKPAK | 安卓vqn免费 | 一元机场加速器 | 一元机场 | 老王加速器 | 黑洞加速器 | 白石山 | 小牛加速器 | 黑洞加速 | 迷雾通官网 | 迷雾通 | 迷雾通加速器 | 十大免费加速神器 | 猎豹加速器 | 蚂蚁加速器 | 坚果加速器 | 黑洞加速 | 银河加速器 | 猎豹加速器 | 海鸥加速器 | 芒果加速器 | 小牛加速器 | 极光加速器 | 黑洞加速 | movabletype中文网 | 猎豹加速器官网 | 烧饼哥加速器官网 | 旋风加速器度器 | 哔咔漫画 | PicACG | 雷霆加速