【问题标题】:Git ignore file locally and always merge theirsGit忽略本地文件并始终合并他们的
【发布时间】:2013-08-22 09:57:07
【问题描述】:

我遇到了一个 git 问题,答案应该在 stackoverflow 上的某个地方,但我找不到。

想象一个团队正在使用 sass 或其他构建文件处理某个项目。多个开发人员构建文件,我们希望对构建的文件进行版本控制,以防非开发人员想要克隆并签出项目而无需先构建。

但是在项目中包含构建的文件总是会产生合并冲突。

我们可以忽略本地更改,只让首席开发人员不时检查他的版本。

可以使用用户定义的 .gitignore 文件或使用以下方法来完成忽略:

$ git update-index --assume-unchanged path-to-file.css

但这在拉动时会产生问题。

$ git pull

remote: Counting objects: 30, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 16 (delta 11), reused 16 (delta 11)
Unpacking objects: 100% (16/16), done.
From github.com:User/MyProject
   4e1s389..a231344  development -> origin/master
Updating 63sdf04..a231344
error: Your local changes to 'path-to-file.css' would be overwritten by merge.  
Aborting.
Please, commit your changes or stash them before you can merge.

解决方法是一直检出文件,例如使用别名:

git config --global alias.cobuilded 'checkout path-to-file.css'

然后经过一些工作和建设:

git cobuilded
git commit -am "work done"
git pull
git push

但是对于这个问题应该有某种更简单的解决方案吧?

git ignore-this-file-and-always-merge-theirs-from-origin path-to-file.css

我已经找到了this 问题和一个可能的解决方案来始终合并他们的问题。但在我的情况下,合并之前的拉动已经失败......

【问题讨论】:

  • 如何更改策略以在您的主分支上完全不提交 css 文件?您仍然可以通过让您的首席开发人员、自动构建服务器工具或 post-commit-hook 在单独的分支上编译 scss->css 来保持能够克隆完整工作存储库(包括 css)的理想。这个单独的分支永远不会合并回 master,但会不断地将您的 master 分支合并到其中,sass 对其运行,然后提交生成的 css。
  • 听起来不错。当某些最终用户或测试人员需要完整的工作副本时,他们可以克隆该 repo 而不是 master!有没有可能用某种推钩来做这个服务器端?

标签: git gitignore


【解决方案1】:

通常这是一个很好的理念: 不要签入生成的文件。

相反,提供一个发布区域或更笼统地说——一个发布机制来满足您的客户(也就是消费团队)。

一般来说,您要寻找的是部署系统,而不是版本控制系统。不过,您可以将两者结合起来。 git 不是一个部署系统。尽管无可否认它可以走很长一段路,但这个方向有一些扩展,我自己有时会出于方便而故意滥用它。

一种方法是使用自动构建系统,每次在某个分支上发生提交(或推送)时都会触发该系统。有可用的“持续集成”工具的开源工具。 Git 提供了触发动作的钩子,例如推入回购:$GIT_DIR/hooks/post-receive。这是一个很好的example for sending emails,可以自动修改为export a release to a filesystem area。之后,您可以在该区域触发构建过程。

或者,您可以修改现有的构建过程以包含最终构建目标。这会将构建目录的副本导出到发布区域。应手动触发目标,并且仅在测试通过时触发。

您的项目可能包含一个版本控制文件,称为“材料清单”(例如“release.bom”),其中列出了在发布发生时应复制到发布区域的所有文件(带有相对路径)。这样一来,您就可以避免不小心将发布区域与那些没人感兴趣的对象或临时文件弄得一团糟。

如果它只是供其他团队内部使用,也许一个简单的rsync,可选的--exclude-from=FILE 选项和git 控制下的排除配置文件就足够了。搜索“rsync 过滤规则”以获取有关其语法的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2012-07-05
    相关资源
    最近更新 更多