git 添加外部项目地址
github 提交第三方模块流程
一、模块的创建及更新
git submodule使用以及注意事项
一、背景
在平时的软件开发过程中常常会有这样的场景,自己负责的某个模块会依赖其他模块或者第三方的library。这时你自己的模块是一个独立的代码仓库,你想要实现这样一种功能,当你从你的模块的代码仓库里把代码拉到本地来的时候,能自动的将你依赖的模块或第三方库都拉到指定的目录当中去。
当然要实现这个功能的方法有很多,比如使用repo之类的工具,又比如如果你使用的是svn作为版本管理工具,那么你可以使用svn的external机制来引用第三方的project。
这里要说的是使用git作为版本管理工具的情况。
二、git submodule
其它的细枝末节就不再赘述了,咱直奔主题。
先来看具体用例:
目前有一个模块A,其代码仓库的地址为:projectA.git, 它需要引用另一个模块B, 其代码仓库的地址为:projectB.git。
假设模块A的本地目录为:projectA
希望引用模块B为模块A的子模块,其在模块A目录下的路径为: projectA/projectB
这里我们通过git 的submodule机制来实现。
比如在命令行里可以直接使用如下命令:
cd projectA
git submodule add projectB.git projectB
- 1
- 2
- 3
注: 这个submodule的 子目录指定时不能以 “/”结尾, 比如上面的命令,就不能写成 projectB/ 这个样子。
就这么简单的一句git命令就可以搞定了,当然这还没完,运行完这个命令之后,在projectA目录执行git status命令,可以看到如下的结果:
这时需要使用git commit命令和git push命令,将添加模块B为模块A的子模块的结果push到模块A的代码仓库里面去。
三、git clone包含子模块的代码仓库
此时,就可以使用git clone命令来抓取模块A的代码仓库,但要同时抓取到子模块的仓库的话,还需要一些方法:
- 正常的使用git clone命令,然后再使用 git submodule init 和git submodule update来获取子模块
git clone projectA.git
cd projectA
git submodule init
git submodule update
- 1
- 2
- 3
- 4
其运行结果如下:
- 在使用git clone命令时,加上–recurse-submodules或–recursive 这样的递归参数
git clone --recursive projectA.git
- 1
其运行结果如下:
四、tortoisegit操作submodule
如果是使用tortoisegit的话,也可以使用图形化界面进行submodule的相关操作,如添加submodule就选择如下图所示的菜单:
添加子模块的界面大概就是下面这个样子:
这里和上面一样“path”一栏不能以”/”结尾。 填写之后,点击OK,就会在主模块的目录下添加对应的子模块。
在clone时也是一样的,它既可以只是clone,然后用上面菜单中,Submodule Update 选项来抓取子模块的内容,也可以在clone时选择递归参数,如下所示:
五、忽略submodule中的修改或新增文件
我们引用第三方的project,大多数情况都是想以“只读”的方式引用,不关心第三方project抓取下来之后是不是被修改,或者是在其目录中添加了untracked的file, 因为我们只是拉取第三方的project,而不会(往往时不能或不允许)对第三方project进行提交。
以上面的模块A和模块B的例子来说,如果模块A和模块B中都有进行修改,其结果可能就是如下这个样子:
这并不是我们想要的结果。一开始的时候我的想法是使用 .gitignore 来忽略submodule的修改,但是无法做到,后来经过一番搜索,终于找到了解决良药。在添加了submodule之后,project的目录下回生成一个.gitmodules文件,这个文件记录了子模块的路径和仓库地址等信息,如下图所示:
我们要做的就是在[submodule “projectB”]中添加一个ignore子项,这个ignore子项可以有上个可选的值,untracked, dirty和all, 它们的意思分别是:
- untracked :忽略 在子模块B(也就是projectB目录)新添加的,未受版本控制内容
- dirty : 忽略对projectB目录下受版本控制的内容进行了修改
- all : 同时忽略untracked和dirty
这里我们先选择dirty(至少先保证不提交对子模块B的任何修改),其他的可以根据具体需求来进行选择。
添加ignore子项之后的.gitmodules文件的内容如下所示:
然后我们再使用git status查看,可以得到图下结果:
可以看出,之前 “modified: projectB(modified content)” 已经不见了, 此时对修改后的.gitmodules文件进行commit和push, 之后在查看status或做commit时就可以忽略掉对子模块B修改的部分了。
如何将Android studio中的项目导入到第三方的git托管库中
准备工具
新建项目
假设此时你已经下载并安装好了git,也在coding上注册了账号。
那我们点击coding上的创建项目
输入好项目名称,然后添加项目描述,在选择私有项目和公开项目的时候注意下,如果不是银牌会员以上,在coding上只能创建5个私有项目,当然,你也可以不花钱,升级成银牌会员,然后就可以有10个私有仓库了。不过公开项目倒是可以无限创建。
所有都输入完毕后,我们点击新建项目,之后会来到以下界面
初始化本地仓库
现在我们电脑上已经有一个Android studio项目了,我们要怎样将电脑本地的项目上传到已经准备好到代码托管库中呢
首先我们通过cmd中的cd命令进入到我们的项目中,使用如下命令将我们本地的项目变成有git仓库的项目
git init
- 1
使用完该命令后,本地项目会多出一些文件
其实使用了git init命令后,本地已经是一个git仓库的状态了,已经可以正常使用git了,所以我们使用以下命令,将当前所有的代码都添加到本地仓库中
git add *
- 1
然后做一次提交操作,将代码都提交到仓库中
git commit -m "首次提交"
- 1
现在,我们将本地仓库和coding上到仓库做一个绑定处理
其实怎么绑定,在coding上创建项目的时候,coding都告诉我们了
我们只需要顺序使用这两行命令就搞定了
git remote add origin https://git.coding.net/用户名/项目名.git
git push -u origin master
- 1
- 2
这样,我们本地已经存在的Android项目就已经和coding上我们创建的项目仓库绑定了。
我们去检查一下coding上有没有我们的代码
看来已经绑定成功了!
使用
让我们来使用一下,首先我们使用Android studio打开我们的项目,然后我们会发现工具栏上会多出这些图标,我用的Android studio3.1.2,不同的版本可能图标形状会不一样,这个形状是我最近升级后的新图标。不过位置都在这里。
打开Android studio后,可能会提醒出现一个提醒框,大概意思是,是否新增的文件都自动add,这里推荐自动add。
原来的工具栏
现在的工具栏
新建文件
在studio上新建一个文件,如果在最开始都提示框选择的是默认添加,那么新建的这个文件就会是绿色,否则就是红色。
如果是红色怎么办呢,那么我们就要自己手动添加一下,方法如下:
提交文件
有了Android studio的协助,提交文件变得十分简单
方式1:
方式2:
然后(刚刚提交A的时候忘保存截图了,所有新建了个B文件)
这样文件就保存了上传文件
其实到这里,本地的仓库就OK了,那么我们现在需要将本地仓库提交到远程的coding上的仓库中,如果觉得下图找起来太麻烦,studio有提供快捷键,还是很方便的。
然后来到这里
点击push,就可以将代码上传到远程仓库中啦!
现在我们去远程仓库中去看看是否上传成功
看来已经完美上传成功!
小提示
Android studio中的文件有4种颜色,分别是白、红、绿、蓝
git 添加外部项目地址的更多相关文章
- 【Devops】【docker】【CI/CD】Jenkins源代码管理 添加gitlab项目地址,报错Failed to connect to repository : Error performing command: ls-remote -h git@192.168.92.130:8090/root/swapping.git HEAD
Jenkins源代码管理 添加gitlab项目地址 报错如下: Failed to connect to repository : Error performing command: ls-remot ...
- eclipse配置tomcat添加外部项目
在eclipse中配置tomcat,添加外部项目. 添加外部项目 然后直接启动服务器,服务器里面不能添加项目.
- Gradle添加外部项目代码
为了测试一些功能,我想在公司的项目中引进外部项目的子模块代码进来调试,试验了好半天终于成功了... 原来不需要导入代码,只要在settings.gradle中这样就好了: 然后就可以和原项目中的代码一 ...
- git添加本地项目到git
1.切换到项目所在文件夹下:git int 2.git add -A 3.git commit -m '11' 4.git remote add origin https://github.com/g ...
- Git添加本地项目出现fatal: unable to get credential storage lock: File exists
把本地项目初始化之后上传到github上出现问题:fatal: unable to get credential storage lock: File exists 解决办法:是因为我上传用的git帐 ...
- git 添加本地项目到远程仓库 记录一下命令
1.初始化 git init 2.关联远程仓库 git remote add origin 你的仓库地址 3.加入到本地仓库 git add * 4.推送(强推).如果不想强推 ,可以先执行下 git ...
- git根据项目地址使用不同代理服务器
问题 由于公司访问GitHub只能走代理,但是内网gitlab服务器又不能走代理. 因此想找到一种方案,可以支持git自动根据项目地址使用不同代理. 方案 如下所示,可以指定GitHub地址使用指定的 ...
- 使用Git上传项目代码到github
github是一个基于Git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开.这对于一般人来说公共仓库就已经足够了. 注册账户以及创建仓库 要想使用gi ...
- GIT将本地项目上传到Github(两种简单、方便的方法)
GIT将本地项目上传到Github(两种简单.方便的方法) 一.第一种方法: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安 ...
随机推荐
- 用Xtrabackup实现MySQL全库备份与恢复
xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下: (1)xtrabackup只能备份innodb和xtradb两种引擎的表,而不能备份myisa ...
- 任务27:Middleware管道介绍
任务27:Middleware管道介绍 HttpContext 图中注册了三个中间件,所有httpContext就会在这三个管道上都执行HttpContext,会在Reponse里面写一些东西.所有东 ...
- javascript的回调函数
函数也是对象 想弄明白回调函数,首先的清楚地明白函数的规则.在javascript中,函数是比较奇怪的,但它确确实实是对象.确切地说,函数是用Function()构造函数创建的Function对象.F ...
- hdoj1465【错排公式(直接水过)】
//注意会爆 int #include <bits/stdc++.h> using namespace std; typedef long long LL; typedef unsigne ...
- 记忆化搜索(DFS+DP) URAL 1223 Chernobyl’ Eagle on a Roof
题目传送门 /* 记忆化搜索(DFS+DP):dp[x][y] 表示x个蛋,在y楼扔后所需要的实验次数 ans = min (ans, max (dp[x][y-i], dp[x-1][i-1]) + ...
- 题解报告:poj 1113 Wall(凸包)
Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...
- A*算法、导航网格、路径点寻路对比(A-Star VS NavMesh VS WayPoint)
在Unity3d中,我们一般常用的寻路算法: 1.A*算法插件 与贪婪算法不一样,贪婪算法适合动态规划,寻找局部最优解,不保证最优解.A*是静态网格中求解最短路最有效的方法.也是耗时的算法,不 ...
- P2676 超级书架
题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有N(1 <= N & ...
- 事件对象(示例、封装函数EventUtil())
事件对象 什么是事件对象? 在触发DOM上的事件时都会产生一个对象. 事件对象event 1.DOM中的事件对象 (1)\type属性用于获取事件类型 (2)\target属性用于获取事件目标 (3) ...
- 5款好用的mysql客户端
1. EMS SQL Manager for MySQL 是一款高性能MySQL数据库服务器系统的管理和开发工具.它支持从MySQL 3.23到6.0的任一版本,并支持最新版本的MySQL的特点,包括 ...