我有一个配置文件,该文件已在本地排除。我之所以没有使用.gitignore
是因为其他团队成员正在更新文件,但是我的本地更改仅适用于我的机器。我将这个问题用作如何排除文件的参考:How do I configure git to ignore some files locally?
一个团队成员已经更新了文件,现在我无法进行git pull。我收到错误消息:
error: Your local changes to the following files would be overwritten by merge:
config/td_config.php
Please commit your changes or stash them before you merge.
但是我的本地设备未显示对td_config.php
的更改,因为它已被排除。我无法提交或隐藏它。
我的问题是:
为什么我的遥控器希望远程控制器不知道对已排除文件的更改,为什么远程控制器会看到对我已排除的文件的本地更改?
如何解决此问题?
我尝试过
git update-index --no-assume-unchanged config/td_config.php
无济于事。
答案 0 :(得分:3)
当我期望遥控器不会知道对已排除文件的更改时,为什么遥控器会看到对我已排除的文件的本地更改?
因为that's not what assume-unchanged
does;实际上,这是相反的目的(加粗):
假设不变的机制不应被滥用。它 是“我知道我的文件系统运行缓慢。我会向Git保证 我不会通过使用这些位来更改这些路径-那样, Git不必每次都检查是否在其中进行了更改 要求输出“ git status””。 那。尤其是,Git并非总是保证他们会永远 认为这些路径未修改-如果Git可以确定路径 标记为假设不变的已更改而不会发生 额外的lstat(2)费用,它保留报告路径的权利 已被修改(因此,“ git commit -a”可以自由提交 改变)。
是的,有很多资源建议assume-unchanged
忽略对跟踪文件的本地更改。它们几乎都是错误的,而您要问的问题是失败的方法之一。
不幸的是,assume-unchanged
似乎经常忽略文件的更改,因此人们继续使用并推荐它。
如何解决这个问题?
skip-worktree
is a better option,但这也不完美。更好的解决方案是与您的团队协调rename the tracked file to td_config.template.php
or similar and properly ignore td_config.php
。
不要打Git;以应有的方式使用它。它没有提供忽略跟踪文件的机制,并且所有当前的解决方法都存在一种或多种缺陷。
(如果您确实想忽略此建议,则应该能够git update-index --no-assume-unchanged
,然后存储所做的更改,然后拉出,然后应用您的更改,然后重新应用该位。但是要知道它没有执行您想要的操作。)
编辑:
OP评论了
最初设置时,我尝试过update-index,skip-worktree和exclude文件...因此,现在很难理解git是否跟踪文件了。
运行git ls-files -v config/td_config.php
可帮助我们确定该文件中哪些设置处于活动状态。在这种情况下,我们得到了
S config/td_config.php
大写字母S向我们显示skip-worktree
is set,并且文件上未设置assume-unchanged
。运行git update-index --no-skip-worktree config/td_config.php
会将其恢复为“常规状态”,此时可以使用前面的任何建议。
答案 1 :(得分:0)
存放文件然后拉动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
findViewById(R.id.btn_get).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CallWebService cws = new CallWebService();
cws.execute();
}
});
}
public static String DebugLog = "MyApp_Log";
class CallWebService extends AsyncTask<String, String, Boolean> {
String resultStr = "";
@Override
protected Boolean doInBackground(String... params) {
Log.i(DebugLog, "sending params to server...");
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME1);
PropertyInfo deviceIdInfo = new PropertyInfo();
deviceIdInfo.setName("deviceId");
deviceIdInfo.setValue("Idqwersdfsd");
deviceIdInfo.setType(String.class);
request.addProperty(deviceIdInfo);
PropertyInfo versionNumberInfo = new PropertyInfo();
versionNumberInfo.setName("versionNumber");
versionNumberInfo.setValue("12");
versionNumberInfo.setType(String.class);
request.addProperty(versionNumberInfo);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.setOutputSoapObject(request);
envelope.dotNet = true;
try {
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.debug = true;
androidHttpTransport.call(SOAP_ACTION1, envelope);
if (envelope.bodyIn instanceof SoapFault) {
String str = ((SoapFault) envelope.bodyIn).faultstring;
Log.i(DebugLog, "bodyIn is instance of soapFault:" + str);
return false;
} else {
SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
if (resultsRequestSOAP != null) {
resultStr = resultsRequestSOAP.getProperty(0).toString();
Log.i(DebugLog, "response is:" + resultStr);
return true;
} else {
resultStr = "No Response";
Log.i(DebugLog, "server no responsed any thing..");
return false;
}
}
} catch (Exception e) {
e.printStackTrace();
Log.i(DebugLog, "Exception in registration:" + e.toString());
resultStr = e.toString();
return false;
}
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if (result) {
} else {
Log.i(DebugLog, "some message");
}
}
}
git stash
git pull