Reputation: 1351
I'm sure this title is fairly obscure. I'm wondering if there is some way in git
to tell it that you want a certain file to use different versions of a file when moving between branches, but to overall be .gitignored from the repository.
Here's my scenario: I've got a Flash Builder project (for a Flex app) that I control with git. Flex apps in Flash Builder projects create three files: .actionScriptProperties
, .flexProperties
, and .project
. These files contain lots of local file system references (source folders, output folders, etc.), so naturally we .gitignore them from our repo.
Today, I wanted to use a new library in my project, so I made a separate git branch called lib
, removed the old version of the library and put in the new one. Unfortunately, this Flex library information gets stored in one of those three dot files (not sure which offhand). So when I had to switch back to the first branch (master
) earlier, I was getting compile errors because master
was now linked to the new library (which basically negated why I made lib
in the first place).
So I'm wondering if there's any way for me to continue to .gitignore these files (so my other developers don't get them), but tell git that I want it to use some kind of local "branch version" so I can locally use different versions of the files for different branches.
Upvotes: 1
Views: 180
Reputation: 84393
Either a file is ignored or it isn't. However, you can commit files to a branch even if they are ignored; you just need to make sure you don't commit them again on the wrong branch.
Ignore your files on the master branch.
git checkout master
cat << EOF >> .gitignore
.actionScriptProperties
.flexProperties
.project
EOF
git add .gitignore
git commit .gitignore
Create an empty branch to hold your configuration files.
git symbolic-ref HEAD refs/heads/flexconfig
rm .git/index
git clean -fdx
touch .actionScriptProperties .flexProperties .project
git add .
git commit
Merge your ignored files into your master branch, but leave them ignored.
git checkout master
git merge --no-ff flexconfig
If you run git status
at this point, it will show a clean working tree but you will actually have your Flex dotfiles in your working tree. Just don't use git add .
or similar, as that will override your .gitignore settings.
Upvotes: 1