git - 如何将数千个本地版本添加到 GitHub?
问题描述
我有一个包含几千个代码版本的文件夹,每个版本都在自己的子文件夹中。但是,我需要开始使用 GitHub,但我希望将我的整个代码发布集合添加到 GitHub 的发布部分下。最简单的方法是什么?
显然,我无法从现有存储库中导入,因为我没有 - 它只是我计算机上的几千个文件夹。
我不能手动提交和标记每个版本,因为太多了。
我知道,如果我想一次性从 GitHub 中删除多个版本,我可以检出整个存储库,从 Tags 文件夹中删除版本文件夹,然后提交更改。
是否也可以使用类似的技术来添加许多版本?我确实尝试将我计算机上的一些发布文件夹复制到 GitHub 上的 Tags 文件夹,但是当我提交时,GitHub 抱怨发布文件夹已过期并且不会接受它们。
所以我的电脑上有数千个发布文件夹。如何在不使用导入且不单独手动提交每一个的情况下将所有这些上传到我在 GitHub 上的存储库?我只是希望它们都可以在 GitHub 上的 Releases/Tags 类别中使用,但是手动提交的太多了。
解决方案
我假设您有一个看起来像这样的发布文件夹:
myproject-1.0/
myproject-1.1/
myproject-2.0/
等等。您想将这些导入到 git 存储库中。我们首先创建一个空的 git 存储库:
git init myproject
这将创建一个名为的目录myproject
,其中包含一个空的 git 存储库。将目录更改为该目录:
cd myproject
现在,要导入您的版本,我们需要按顺序遍历您的版本,并为每个版本执行以下操作。
将发行版中的所有文件复制到存储库中:
cp -a ../${release}/* .
将文件添加到存储库:
git add .
提交文件:
git commit -m "imported release $release"
(可选)标记提交:
git tag $release
或者要将标签变成 GitHub 版本,创建一个带注释的标签:
git tag -a -m "imported $release" $release
在上述的每次迭代之间,您希望在复制到下一个版本之前删除存储库中的所有文件。
为了对此进行原型制作,我抓取了 GNUhello
项目的所有版本并将它们放入一个目录中;这意味着我从这个开始:
$ ls
hello-1.3 hello-2.1.1 hello-2.4 hello-2.7
hello-2.1.0 hello-2.2 hello-2.5 hello-2.8
hello-2.10 hello-2.3 hello-2.6 hello-2.9
我编写了以下脚本来执行导入:
#!/bin/bash
if [ ! -d hello-repo ]; then
git init hello-repo
fi
# change directory into the repository
cd hello-repo
# iterate over the releases in version order
ls -d ../hello-[0-9]* | sort --version-sort -t- -k2,2 |
while read path; do
release="${path##*/}"
echo "importing release: $release"
rm -rf *
cp -a $path/* .
git add .
git commit -m "imported release $release"
git tag -a -m "imported $release" "$release"
done
请注意,我正在使用sort --version-sort ...
以确保获得按正确顺序列出的目录;没有它,这些目录的词法排序将hello-2.10
立即放在hello-2.1.0
.
我在这里创建了一个 GitHub 存储库,其中包含运行该脚本的结果,因此您可以查看最终结果。
因为我创建了带注释的标签 ( git tag -a ...
),所以每个标签都会自动转换为 GitHub 版本(参见此处)。
推荐阅读
- ansible - 循环打印ip地址
- python - 如何使用 Gunicorn 在 Falcon 中启动应用程序
- ios - 为什么将无法识别的选择器发送到实例?
- html - 如何在ios浏览器中使禁用的输入按钮不是“灰色”?
- java - Spring Boot 和混淆代码 Proguard
- javascript - 如何使用硒在 Youtube 中向下滚动?
- javascript - 如何使用 node.js 中的另一个数据处理获取的数据?
- python - Python3 psycopg2:使用返回“没有要获取的结果”
- c++ - 从具有指向 char 数组的指针的数组中为 String 赋值
- ansible - 使用 Ansible playbook 时出错。错误消息:“msg”:“此模块需要 boto”