On the master branch, I have new version of the folder with files in it, e.g.:
config
- db
- rdbms
- postgres.conf
- redis.conf
- nosql
- mongo.conf
- web
- apache.conf
- security.conf
I need to take older version of these files and add them to the master but the top folder config should be renamed to config-old, so that both config and config-old are present:
config
- db
- rdbms
- postgres.conf
- redis.conf
- nosql
- mongo.conf
- web
- apache.conf
- security.conf
config-old
- db
- rdbms
- postgres.conf
- redis.conf
- nosql
- mongo.conf
- web
- apache.conf
- nginx.conf
I know how to use git show or git cat-file to restore individual files and using shell redirection I can save them under another name, but how do I do this with an entire folder and all subfolder/subfiles in it?
Obviously, I can just switch to the required branch/revision, copy the folder somewhere outside of the git root, switch back to master and then copy back under different name, but I wonder if this can be done with git itself?
CodePudding user response:
You can do it quite easily with basic commands:
git checkout $OLD_VERSION
cp -R config config-old
git checkout master
At this point config-old is untracked so:
git add config-old
git commit -m 'Copy config from $OLD_VERSION to config-old'
CodePudding user response:
If you create an empty folder config-old beforehand,
you can use git archive to get config/ from the revision of your choice
and extract it to the folder config-old/ like this:
git archive --format=tar <COMMIT/BRANCH/TAG> -- config | tar --extract --directory=./config-old --strip-components=1
