由于与本地排除文件冲突而无法进行git pull

时间:2019-04-09 20:08:52

标签: git

我有一个配置文件,该文件已在本地排除。我之所以没有使用.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的更改,因为它已被排除。我无法提交或隐藏它。

我的问题是:

  1. 为什么我的遥控器希望远程控制器不知道对已排除文件的更改,为什么远程控制器会看到对我已排除的文件的本地更改?

  2. 如何解决此问题?

我尝试过 git update-index --no-assume-unchanged config/td_config.php 无济于事。

2 个答案:

答案 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