git 一个仓库管理多个项目
1. 仓库需求
- 一个仓库可以管理多个项目,仓库目录如下
rep-1
| _ folder-a
|_project-a
|_project-b
- 各项目之间独立存在
- 为各项目打上标签
- 标签的压缩文件内不能包含其他项目文件,仓库公有文件除外
- 考虑使用 git workflow
2. 克隆父项目远程仓库
可以先创建一个远程空仓库
$ git clone git@xxxxxx/rep-1.git # 克隆父项目远程仓库,到当前路径
$ cd rep-1 # 进入父项目目录,默认进入 master 分支
3. 创建项目公有文件
项目公有文件:各项目都包含的文件,标签的压缩文件内包含公有文件
可在rep-1或folder-a文件夹下创建project-a和project-a的公有文件。在创建项目分支前,创建公有文件,可减少跟踪文件的增删。若不需要项目公有文件可不创建。
# master 分支下,创建并切换到 develop 分支
$ git checkout -b develop # 父分支为 master
$ cd folder-a
$ touch README.md # 创建项目公有文件
$ git add README.md
$ git commit -m ''
$ git push origin develop:develop
4. 创建项目分支 – aa
在 develop 分支上创建无父分支的项目分支 aa。
# 当前,folder-a文件夹 develop 分支
$ git checkout --orphan [branch-name] # 创建并切换无父分支的新分支
$ git ls-files # 查看当前分支追踪的文件,是否有公有文件
# 删除暂存区当前分支不需要追踪的文件或文件夹
$ git rm --cached -r [folder-name]
$ git rm --cached [file-name]
$ git ls-files # 再次查看,确认删除不需要追踪的文件
$ cd project-1 # 进入 project-1 的目录
$ git add . # 添加当前文件夹中的内容到暂存区
$ git commit -m 'commit 说明文字' # 将暂存区的内容提交到本地库
$ git push origin [branch-name]:[branch-name] # 将本地库的内容推送到远程库
$ git tag -a [tag-name] -m '标签说明' [commit-id] # 打标签
$ git push origin [tag-name] # 将标签推送到远程库
5. 创建项目分支 – ab
- 重置 HEAD 到当前 (aa) 分支的第一个 commit
$ git reset --soft [commit-id] # --soft 不改变index和working copy中的文件
- 切换到 develop 分支
$ git checkout [branch-name] # 切换分支
- 查看跟踪文件
$ git ls-files
- 添加或删除跟踪文件或文件夹,develop 分支只可跟踪公有文件
$ git add [file] $ git rm [file]
- 重置HEAD
$ git reset --keep HEAD # 保留工作目录与HEAD的文件差异, 将index将全部复原成HEAD # 即把在 HEAD 之后的提交清除掉,但保持工作区不变
-
在 develop 分支上创建无父分支的分支 ab
同创建分支aa
6. 注意事项
- 创建好develop分支并提交公共文件后,在 develop 分支的同一个 commit 处创建项目分支;
-
分支切换:
- reset –soft 到当前分支的第一个 commit
- 切换到 develop 分支
- 切换到所需无父分支的分支
- 切换后的分支应处在当前分支的第一个 commit
- reset –soft 到当前分支最新的 commit
例如
当前 HEAD 在 aa 分支 a811d95 处,要切换到 ab 分支,切换流程如下:
$ git reset --soft 229bbcd # 将分支 aa 的 HEAD 指向 229bbcd
$ git checkout ab # 切换分支
$ git reset --soft 307d568 # 将 HEAD 指向当前分支的最新一次提交
$ git reset --keep HEAD # 重置 HEAD