我们在Bitbucket上有我们的存储库。
我需要创建另一个具有相同内容减去一个文件但没有原始文件的历史记录。 这些存储库需要从现在开始同步,除了一个重要文件需要只在我们的原始存储库中。
这样做的聪明之处是什么?
答案 0 :(得分:0)
关于重要文件可能有点尴尬......但是这里有一个策略来创建没有这个文件的新repo。你将能够从原始仓库拉出来,但是如果你回到它(或者拉向另一个方向)它将从原始仓库中移除文件:( ...这是因为git适用于提交而不是单个文件
首先使用来自特定分支/提交的文件制作一个新的仓库:
# clone the repo into a new repo (just making it locally for now)
git clone <url> newrepo
# Move into the repo
cd newrepo
# Checkout the commit you want (e.g. a branch name called "mybranch")
checkout mybranch
# Delete the .git folder - this changes it from a cloned repo to just a bunch of files
rm -rf .git
# Now make this folder into a new repo
git init
# Now add this "pile of files" into the repo
git add .
# First commit
git commit -m "First commit created from repo <url>"
现在删除你要删除的文件(你可以在第一次提交之前执行此操作,如果你不想在历史记录中这样做):
git rm somefile
git commit -m "removed unwanted file"
现在将一个遥控器(称为同步或任何你想要调用的东西)添加到原始URL
git remote add sync <url>
所以现在你可以从最初的回购中拉出来。但是你必须小心不要推回你的“重要文件”。这里的问题是,您在一个仓库中执行的任何操作都将与另一个仓库同步(因此,如果您将更改推回到远程“同步”(原始仓库),那么它将推送“已删除”文件。 。
再次 - 如果你将文件添加到.gitignore,一旦你同步,这将在两个repos中被选中...所以也许你需要将这一个重要的文件完全放在一个单独的repo中并且用户需要克隆,如果他们需要它......
注意:在新的repo中使用git pull sync mybranch
合并来自原始repo / mybranch的更改。
注意:执行此操作时(如上所述),您将看到本地历史记录树与远程同步存储库的历史记录树合并。因此,在第一次拉动之后,您仍然会在分支中看到只有2次提交,但您也会看到(使用远程“同步”中的git log --graph --all --decorate --oneline
树。{/ p>