我有一个文件database.properties
,其中有
password = something
因此,每当我必须测试某些内容时,我必须将此行更改为本地密码。团队中的每个人都有自己的本地密码。
我想我必须做以下其中一项:
每次我提交时都不应该添加database.properties
索引(我不想ignore
这个文件),但也有
很多文件很容易错过这个文件。
在提交之前撤消更改,但大部分时间我忘了 这样做。
创建个人资料可能是实现此目的的一种方式,但即使出现与database.properties
类似的问题。
我已查看Can git ignore a specific line?和How to tell git to ignore individual lines, i.e. gitignore for specific lines of code。
从temporarily ignoring files我知道我们可以做到
git update-index --assume-unchanged <file>
但我每次都必须这样做。
上述所有参考文献都是在3 - 4年之前被提出/写过的。所以我只想知道如果有更好的方法可以忽略这一行。
修改
按照@ VonC的回答,我尝试在.git/info/.gitattribute
中添加过滤器
{directory_path}/database.properties filter=password // I have given the correct directory path.
我添加了smudge
和clean
脚本:
git config --global filter.password.smudge ~/smudge.sh
git config --global filter.password.clean ~/clean.sh
(当我运行~/smudge.sh
和~/clean.sh
时,它会正确替换password= something
行。所以脚本是正确的。)
但是当我添加/提交database.properties
时,似乎对database.properties
文件没有任何影响。 (我猜测~/clean.sh
应该在我将其添加到索引时运行)
我做错了什么?
答案 0 :(得分:1)
我支持2014年的回答#34; Can git ignore a specific line?&#34;:使用git内容过滤器来更改另一个内容的文件行。
它仍然需要(一次)git config
命令才能在您的仓库中声明该过滤器,但它将保持活动状态(与git update-index
, which can be discarded on, for instance, a git reset
相反)
过滤器与.gitattributes
文件中的文件相关联,与database.properties
放在同一文件夹中。 (see discussion)
它与要在repo的本地配置中执行的程序相关联。
答案 1 :(得分:1)
一种可行的方法是将<?php
$uname=$_POST['txtuname'];
$pwd2=$_POST['txtpwd2'];
$con=mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("onlineshop",$con);
$r=mysql_query("select password from users where username='$uname'",$con);
$row = mysql_fetch_row($r);
$val=$row[0];
if($val!="")
{
if($pwd2==$val)
{
session_start();
$_SESSION['username']=$uname;
header("location:index.php");
}
else
{
$msg="Invalid UN/PW";
}
}
?>
复制到database.properties
并编辑后者以用占位符替换密码。将database.properties.in
(但不是database.properties
)添加到您的database.properties.in
文件中。
接下来,您需要编写一个小脚本来将.gitignore
复制到database.properties.in
并填写正确的密码。此脚本可以是构建基础结构的一部分(在database.properties
更改后运行),也可以将其设置为提交后hook。