如何提取 2 个文件作为 git 子模块?
How extract 2 files as a git submodule?
我有两个文件想发送它们自己的新存储库,但我也想保留它们自己的历史记录以便新存储库已经有一些历史记录。
我尝试搜索并找到了这些线程:
- Splitting a set of files within a git repo into their own repository, preserving relevant history
- How to split a git repository while preserving subdirectories?
- Create a submodule repository from a folder and keep its git commit history
但是我想不通具体怎么写命令。我根据以上答案尝试 运行 这个:
git clone repo
git remote rm origin
cd repo
git filter-branch --tree-filter 'git rm --cached --ignore-unmatch "filename1" "filename2"' -- --all
我希望清理当前存储库并只保留这两个文件及其历史记录,然后我可以将它作为一个新的子模块推送,但是在 运行 命令之后我所有的文件都保留在存储库。
我设法通过从历史记录中删除所有文件来做到这一点,除了我需要的两个文件。我必须查看整个历史并找出所有被重命名的文件的名称,并详细说明一个大文件和文件夹名称列表:List all the files that ever existed in a Git repository
git log --pretty=format: --name-only --diff-filter=A | sort -u
然后我 运行 这些命令:
git clone repo
git remote rm origin
cd repo
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch "folder1" "file1" "etc" -r -f' \
--prune-empty --tag-name-filter cat -- --all
git remote add origin new_bare_empty_remote
或者,使用它删除不在 "allowed.list.txt"
中的所有文件
git filter-branch -f --prune-empty --index-filter \
'git ls-files -z \
| grep -zv "$(cat "/absolute/path/the.allowed.list.txt")" \
| xargs -0 -r -n 10 git rm -r --cached --ignore-unmatch -- {}'
https://gist.github.com/ssp/1663093 如何从 git 存储库
中提取单个文件及其历史记录
我有两个文件想发送它们自己的新存储库,但我也想保留它们自己的历史记录以便新存储库已经有一些历史记录。
我尝试搜索并找到了这些线程:
- Splitting a set of files within a git repo into their own repository, preserving relevant history
- How to split a git repository while preserving subdirectories?
- Create a submodule repository from a folder and keep its git commit history
但是我想不通具体怎么写命令。我根据以上答案尝试 运行 这个:
git clone repo
git remote rm origin
cd repo
git filter-branch --tree-filter 'git rm --cached --ignore-unmatch "filename1" "filename2"' -- --all
我希望清理当前存储库并只保留这两个文件及其历史记录,然后我可以将它作为一个新的子模块推送,但是在 运行 命令之后我所有的文件都保留在存储库。
我设法通过从历史记录中删除所有文件来做到这一点,除了我需要的两个文件。我必须查看整个历史并找出所有被重命名的文件的名称,并详细说明一个大文件和文件夹名称列表:List all the files that ever existed in a Git repository
git log --pretty=format: --name-only --diff-filter=A | sort -u
然后我 运行 这些命令:
git clone repo
git remote rm origin
cd repo
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch "folder1" "file1" "etc" -r -f' \
--prune-empty --tag-name-filter cat -- --all
git remote add origin new_bare_empty_remote
或者,使用它删除不在 "allowed.list.txt"
git filter-branch -f --prune-empty --index-filter \
'git ls-files -z \
| grep -zv "$(cat "/absolute/path/the.allowed.list.txt")" \
| xargs -0 -r -n 10 git rm -r --cached --ignore-unmatch -- {}'
https://gist.github.com/ssp/1663093 如何从 git 存储库
中提取单个文件及其历史记录