我可以在不将其历史记录合并到主行的情况下对项目中的点文件进行版本控制吗?



我相信这个标题相当晦涩难懂。 我想知道是否有某种git方法可以告诉它您希望某个文件在分支之间移动时使用文件的不同版本,但总体上从存储库中被 .gitignore 。

这是我的场景:我有一个Flash Builder项目(用于Flex应用程序),我用git控制。 Flash Builder 项目中的 Flex 应用程序创建三个文件:.actionScriptProperties.flexProperties.project 。 这些文件包含大量本地文件系统引用(源文件夹、输出文件夹等),因此我们自然会从存储库中 .git 忽略它们。

今天,我想在我的项目中使用一个新的库,所以我做了一个名为 lib 的单独 git 分支,删除了旧版本的库并放入了新版本。 不幸的是,这个 Flex 库信息存储在这三个点文件之一中(不确定是哪个点文件)。 因此,当我不得不切换回第一个分支(master)时,我遇到了编译错误,因为master现在链接到新库(这基本上否定了我最初制作lib的原因)。

所以我想知道是否有任何方法让我继续 .gitignore 这些文件(所以我的其他开发人员没有得到它们),但告诉 git 我希望它使用某种本地"分支版本",这样我就可以在本地使用不同分支的不同版本的文件。

TL;DR

文件要么被忽略,要么不被忽略。但是,即使文件被忽略,您也可以将文件提交到分支;您只需要确保不会在错误的分支上再次提交它们。

选项

  1. 如果您想在 git 下维护修订,则可以使用子模块或子树合并,但在单独的项目中。
  2. 使用 RCS 对 Git 忽略的文件进行版本控制。只是要小心 git-clean;如果您吹走 *,V 文件,您将丢失 RCS 修订历史记录。
  3. 保留一个分支,其中只有自定义文件,并定期将忽略的文件合并到工作树中

选项 3,详细信息

忽略主分支上的文件。

git checkout master
cat << EOF >> .gitignore
.actionScriptProperties
.flexProperties
.project
EOF
git add .gitignore
git commit .gitignore

创建一个空分支来保存配置文件。

git symbolic-ref HEAD refs/heads/flexconfig
rm .git/index 
git clean -fdx
touch .actionScriptProperties .flexProperties .project
git add .
git commit
将忽略

的文件合并到主分支中,但忽略它们。

git checkout master
git merge --no-ff flexconfig

如果此时运行git status,它将显示一个干净的工作树,但实际上您的工作树中将有 Flex 点文件。只是不要使用git add .或类似的东西,因为这会覆盖你的.gitignore 设置。

最新更新