use git smudge/clean to replace file contents

℡╲_俬逩灬. 提交于 2019-11-26 16:47:23

问题


I am attempting to use git to manage deployment to my live website. The problem that I'm having is that I have a couple of settings files that I don't want to be updated when I push to production

what I'm looking at doing is either using a hook or smudge/clean to change the file contents for example from

<?php
define('DB_NAME', 'live');
define('DB_HOST', '127.0.0.1');
define('DB_USER', 'live_user');
define('DB_PASS', 'livePass');

to

<?php
define('DB_NAME', 'local');
define('DB_HOST', '127.0.0.1');
define('DB_USER', 'local_user');
define('DB_PASS', 'localPass');

Is there anyone who could talk me through the process please

I did wonder about using post-receive hook and a shell script to replace the contents, but ideally I want the contents in the repo to be changed before I run git checkout -f not changed in the live copy after


回答1:


ideally i want the contents in the repo to be changed before i run git checkout -f not changed in the live copy after

The closest is a filter content driver which will replace the value at the git checkout.

(from Scott Schacon's Pro Git book page on Git Attributes: section "Keyword Expansion")

So in your case: a smudge filter, declared in a .gitattributes file.

See "Can git automatically switch between spaces and tabs?", except you would use a sed to replace local to live (as in this example)




回答2:


I think, you have to read topic Customizing Git - Git Attributes in Git Book from start to end in order to have full picture, but especially carefully inspect part "Keyword Expansion", where custom hand-made scripts used to coverting KEYWORD in repository to FINAL TEXT in Working Directory (and in back). They are any code, which can be executed on host with Working Directory, referenced from .gitattributes file

Note: Because you have to have different clean-filter output (for local and live), you may have two slightly different (in content) clean scripts on local and live WorkingDir under common filename (in book's sample clean result in equal for all locations - single script used).



来源:https://stackoverflow.com/questions/14282083/use-git-smudge-clean-to-replace-file-contents

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!