Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
吉特:唐';不要在Windows上更新某些文件_Windows_Git - Fatal编程技术网

吉特:唐';不要在Windows上更新某些文件

吉特:唐';不要在Windows上更新某些文件,windows,git,Windows,Git,我们使用的git respository有20000多个文件 我的团队维护该存储库中大约100个配置和源文件的本地版本。原始数据库作为一种基础,几个组根据自己的需要进行修改和调整(一些核心内容不允许更改,但前端和一些自定义数据库内容在组之间是不同的) 因此,我们通常希望更新到最新版本,但不希望git更新覆盖我们保留本地修改的文件 我们使用的机器是基于windows的。当前,存储库被克隆到windows服务器,然后被签出/克隆到开发机器(也是windows)。开发人员根据需要进行更改,并重新提交给

我们使用的git respository有20000多个文件

我的团队维护该存储库中大约100个配置和源文件的本地版本。原始数据库作为一种基础,几个组根据自己的需要进行修改和调整(一些核心内容不允许更改,但前端和一些自定义数据库内容在组之间是不同的)

因此,我们通常希望更新到最新版本,但不希望git更新覆盖我们保留本地修改的文件

我们使用的机器是基于windows的。当前,存储库被克隆到windows服务器,然后被签出/克隆到开发机器(也是windows)。开发人员根据需要进行更改,并重新提交给我们的本地回购协议。本地回购协议每天更新一次。我们从不向主人交代

因此,我们希望所有未被我们的组更改的文件都能更新,但任何已更改(曾经)的文件都不会更新

有没有一种方法可以让这种情况自动发生,所以windows服务器每天都会自动更新,而忽略那些我们保留修改的文件。如果我们想在这个“不更新”列表中添加一个新文件,只需右键单击(甚至是一个平面文件列表)。我看了git ignore,但它似乎是为了提交,而不是为了更新

更好的方法是自动下载普通文件,但让它们自动重命名。例如,settings.conf是一个我们通常希望保留更改的文件,但是如果他们修改了该文件中条目的处理方式或添加了额外的选项,那么最好将其作为settings.conf.vanilla或其他文件下载,因此我们只需对我们的.vanilla文件运行一个diff,看看我们想要保留什么。虽然这个功能不是绝对必要的,而且似乎不太可能

如果无法在windows计算机上完成此操作(windows软件不支持此类功能),请列出一些Linux选项(如果可用)。如果需要,我们可以选择使用Linux服务器托管本地git repo


谢谢。

听起来您正在使用一个正在积极开发的第三方代码库,您需要应用自己的定制

我认为您要寻找的答案是
重新设置基础
。您不需要编写任何外部逻辑来实现这一点,除了定期引入第三方更改并在其上重新调整修改的作业

这也应该比简单地忽略已修改的文件更正确,因为这样您就不会意外地忽略第三方对这些文件所做的更改(有时可能会发生冲突,这可能会令人沮丧,但总比默默地忽略重要更改要好)

假设您的本地回购实际上只是一个分支,请在您自己的分支上维护您的更改,并且每次更新远程存储库时,只需在这些更改的基础上重新设置本地分支的基础:

git pull origin master
git checkout custom_branch
git rebase master
git pull origin master
编辑

完成此操作后,您将在
custom\u分支
上所做的所有更改位于
master
之上。然后,您可以继续在自己的分支上进行自定义,第三方代码的开发也可以独立进行

下次要引入额外更改时,将重复此过程:

在引入对第三方代码的更改之前,请确保您在主分支上:

git checkout master
拉入更改:

git pull origin master
git checkout custom_branch
git rebase master
git pull origin master
更改为您的定制分支机构:

git checkout custom_branch
将您的更改移动到第三方更改之上:

git rebase master
然后,这将再次将您自己的所有更改置于
master
之上<代码>主控
本身不会更改

请记住,回购协议的结构只是来自一整套“散列”,它们构成了一棵树。您的分支就像“post-it”便笺,附加到特定的散列,并且可以随着分支的增长移动到另一个散列

rebase
就像砍掉一根树枝,然后将它重新连接到其他地方。在本例中,您所说的是“切掉我们的更改,并将它们重新连接到主干上”


如果您可以安装一个可视化工具,比如GitX,那么在重新设置基础时查看分支标记是如何移动的将非常有帮助。命令行非常适合使用,但我发现像GitX这样的东西对于处理您的回购结构来说是非常宝贵的。

这听起来很有希望,但我恐怕真的不知道如何正确设置它。我在本地服务器上有存储库,git pull origin master运行良好。但是当我尝试执行git checkout custom_分支时,它说它不存在。我制作了“git branch custom_branch”分支。我试图覆盖我们的自定义文件。它认为它与主控不同,但当我做git rebase主控时,它只是将所有内容放回主控。如果它足够简单,你能提供说明,就好像我们从一开始就在设置它一样。我已经编辑了我的答案,添加了一些额外的解释。如果这不合理,请告诉我。我创建了一个虚拟回购协议,只是为了再次检查我是否按照正确的顺序给了你重定基准参数,因为这很容易弄糊涂,但我很确定我所说的对你试图做的是正确的。我没有从一开始就添加说明,因为你的评论表明你做的一切都是正确的,也许只是不清楚你是否已经有了你想要的结果。