¿Cómo versionar el archivo .git/config?

I have a .gitignore file like the following:

.*
!.gitignore

And I would like to version my .git/config file such that when I do a git pull my .git/config file updates automatically.

¿Cómo puedo hacer esto?

Intenté algo como:

.*
!.gitignore
!.git/config

But this didn't work. I know if I create a link (ln -s .git/config configurations/git/config) I can version it, but I would like a better way to update the original one automatically.

I'm thinking of creating a hard link to it (ln .git/config configurations/git/config configuration/git), but it doesn't appear to be the best way. Is there a way to avoid this? Will Git work properly when versioning hard links?

Edit: explaining why to do this

The main motivation to do this is that I would like to version the home folder of a user of mine. I will use this versioning to help me on some kind of deploys. I'd like to keep all clones synchronized. Conflicts will appear just if I don't manage the things well, and I'll be taking care of this. Maybe I will be versioning another protected git files too.

preguntado el 25 de abril de 13 a las 00:04

Why exactly do you need this? It sounds like a bad idea. -

Please see my edit above. -

4 Respuestas

You can't 'version' your .git/config file. What you can do is create a .gitconfig in your working directory and commit that. Then after a clone you perform.

  cat .gitconfig >> .git/config

Por supuesto, this is fraught with all sorts of potential problems. What if somebody edits .gitconfig? You'd need to undo .git/config and then re-append after git pull. Y si .gitconfig changes on a different branch? You'd need to undo .git/config and re-append on git checkout <branch>

So, I'm not recommending changing .git/config; but if you must, you must.

Respondido 26 Abr '13, 15:04

GoZoner, I agree this solution will hold, but I would like avoid this because maybe I will versioning other protected git files. But If I really can't to do this I will need to create shell script to do something similar. - GarouDan

As stated by @Tuxdude it is bad information to share .git/config misma.

Pero Git (1.7.10+) now supports config inclusion!

So, for important options you may said place them in file: .git.config/repository.config y en .git/config just place link to it like:

[include]
        path = ../.git.config/repository.config

I just add such recommendation in readme file for repo. It much easy to just copy/paste many lines and versioning important settings like regular file. It also transfer updates for all users of repo.

Respondido el 15 de enero de 19 a las 12:01

It is a bad idea to version your .git/config archivo.

git doesn't let you version anything under the .git directory because the contents of the .git are local to your repo, and 2 people cloning from the same remote URL, need not have the same set of files under the .git directory after the clone.

For example, you might just have a single remote named origin while the other developer might have named the remote something like foo instead. Another developer might have 2 remotes named bar y baz.

The info about remotes (URLs, refspec, etc.), local branches (like upstream tracking branch, etc.), are stored in your .git/config archivo.

If you really need to override some configuration, you can edit the .git/config file locally or if it is an option that you could set globally use your ~/.gitconfig o equivalente.

Respondido 25 Abr '13, 00:04

Tuxdude, maybe is a bad idea, but as I explain (see the edit please) on my question, I would like to version this because I would like keep this file syncronized on all clones of mine. If I will have conflits or miss configuration depends only of my managing. - GarouDan

I don't understand all these "No" answers... There are a lot of good reasons to version your config file. For example if you set up gitflow for a repository, why would you want to let everyone set this up locally? You'd need to create a documentation, when you could just version it... - Inc33

To add to the already excellent answers, and to actually answer the OP's question:

I'm thinking of creating a hard link to it (ln .git/config configurations/git/config configuration/git), but it doesn't appear to be the best way.
Hay alguna manera de evitar esto?
Will Git work properly when versioning hard links?

No:

  • hard links aren't represented in Git: see "Git y enlaces duros"
  • Symlinks would simply be stored as text file with the path of the linked file.

contestado el 23 de mayo de 17 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.