Using Git to keep different versions of a file loc

2019-03-27 23:46发布

问题:

I have a PHP config file i'd like to manipulate locally but ignore those changes during git commits to my master repository. I had a .gitignore file which used to ignore this PHP file but bad things happen and now the config.php file is no longer being ignored and I can't remember how to re-ignore it.

I know people on SO say to use git rm --cached <filename> but I can't for the life of me figure out how not to make git rm... keep deleting my config.php file.

I'm wondering if someone can list how to ignore my config.php such that I can keep editing it locally but these changes don't get added to the repo.

here's the entire contents of my .gitignore:

application/config.php

here's some php code in my config.php I'd like to keep local and NOT go in my master repo:

$config['base_url'] = "http://localhost/";
//$config['base_url'] = "http://mysite.com/"; // this is the code and NOT
// "http://localhost" that i'd like to keep in my repo

This is what deletes my file:

  1. git rm --cached application/config.php
  2. make changes to the application/config.php file and another file (as a control)
  3. git commit -m 'config.php shouldn't be changed'

    result: 2 files changed, 1 insertions(+), 370 deletions(-) (config.php is 370 lines long)

回答1:

I solved my own problem. I actually need this:

git update-index --assume-unchanged <filename>

Assuming the .gitignore and config.php files being specified as above in my question, here's the complete workflow:

  1. git update-index --assume-unchanged application/config.php
  2. git add -A
  3. git commit -m 'now config.php will be ignored'
  4. git push origin master

Now http://localhost will remain in the config.php on my local copy of the repo and http://my-site.com will be preserved in the config.php in my master repo.



回答2:

You need to have config.php in your .gitignore file.

If, however, you've actually added config.php to your repo, you'll need to git rm it and then commit, and then recreate it (or you can make a copy and then copy back).