如何将过去的历史导入新的git repo

ehxuflar  于 2023-10-14  发布在  Git
关注(0)|答案(1)|浏览(123)

我有很多旧的脚本想导入到GitHub。我想知道是否有一种方法可以添加在git开始跟踪更改之前发生的历史。

**现在正在发生的事情:**我在Github或本地git上做了一个repo。我添加了旧的脚本文件,看起来像是我刚刚在git中创建的文件,但该文件可能是几年前创建的。
示例文件

!/bin/bash
# <date> created this script to do this
# yyyymmdd added feature 
# yyyymmdd fixed something

我在更新文件的标题中跟踪我的更改。有没有办法在新的git repo中添加版本控制信息?
如果有更好的方法来添加旧脚本的历史,让我知道。

nr7wwzry

nr7wwzry1#

可以只使用一个repo来完成它,但是在这个过程中使用两个单独的repository可以使它更容易,并且提供更少的错误机会。
首先,创建一个新的、空的Git repo并添加你的文件:

git init old-history
cd old-history
# copy your file, make sure you use the expected directory structure
git add your_file
git commit -m 'adding file' # optionally specify --date=... if you require that
# change file content / add more files / create more commits, as desired
# note down the commit id of the last commit! (git rev-parse HEAD)

一旦你有了它,现在是时候把两个存储库嫁接在一起了:

git remote add existing ../path/to/your/existing/new-repo
git fetch existing
# find the root commit of your existing repo (assuming a "master" branch):
root="$(git log --oneline existing/master | tail -1)"
# replace the root commit with a commit that links both histories:
git replace --graft "$root" "$(git rev-parse HEAD)"

此时,当您运行git loggitk时,您应该会看到嫁接的历史,看起来您的脚本总是仓库的一部分。
最终,您希望使用git filter-branch持久化嫁接的历史。请注意,这将更改 * 您现有repo* 的所有提交的提交哈希值!

git filter-branch --tag-name-filter cat -- --all

最后,将重写的历史包推送到现有的repo/upstream或获取重写的历史。如果这个repo是共享的,那么每个拥有克隆的人(如果你有同一个repo的多个克隆,那么你也是)都需要丢弃他们的本地版本,并用新的重写的历史来替换它。

相关问题