我在一个新项目上使用git,该项目有两个并行 - 但目前是实验性的 - 开发分支:
master:导入现有的代码库加上一些我一般都知道的mod exp1:实验分支#1exp2:实验分支#2exp1并exp2代表两种截然不同的架构方法.直到我走得更远,我无法知道哪一个(如果有的话)会起作用.当我在一个分支中取得进展时,我有时会在另一个分支中进行编辑,并且只想合并那些.
将选择性更改从一个开发分支合并到另一个开发分支而将其他所有内容合并的最佳方法是什么?
我考虑过的方法:
git merge --no-commit 然后手动取消大量编辑,我不想在分支之间做出共同点.
手动将公共文件复制到临时目录,然后git checkout移动到另一个分支,然后更多地手动从临时目录复制到工作树中.
以上的变化.暂时放弃exp分支并使用另外两个本地存储库进行实验.这使得手动复制文件更加简单.
所有这三种方法都显得乏味且容易出错.我希望有更好的方法; 类似于过滤器路径参数的东西会git-merge更具选择性.
由于外部奇怪的约束,我无法修改.gitignore我的存储库.有没有办法忽略文件和目录,而不是修改.gitignore?即使它是全局配置的全局解决方案,也将应用于我的所有存储库.
假设我通过git存储库与某人合作,并且有一个特定的文件,我永远不想接受任何外部更改.
有没有办法让我设置我的本地仓库,以便每当我拉动时不抱怨冲突的合并?我想在合并此文件时始终选择我的本地版本.
我在这里读了几个git问题,但找不到这个问题的答案:
我有一个公共和私人分支机构,我想允许某些文件发散.
这些是包含密码和本地自定义的配置文件.
我确实希望能够以两种方式合并分支:从私有到公共和返回,但我不希望自动合并这些特定文件.
有没有办法以这种方式设置git?我很想找到一个自动化解决方案:) - 这样可以像往常一样进行合并.
编辑:这是适合我的解决方案(感谢VonC对gitattribute的建议)
对我来说唯一意想不到的事情是"合并保护"只有在两个分支中的文件分歧后才开始工作,而不是在应用以下配置后立即开始工作
.gitattributes(如果你想分享这个,可以用git跟踪)或.git/info/attributes:
file1 merge=keepmine
path/file2 merge=keepmine
Run Code Online (Sandbox Code Playgroud)
keepmine是一个命名的自定义合并管理器,它只是一个do-nothing命令而不是所选文件的内部合并驱动程序,它在下面设置
从私人分支到公共分支合并时,我通常会这样做git merge --squash private.这样私有编辑就不会进入公共分支的git历史.
的.git /配置:
#public repository
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = <public repo git url>
#private repository
#has to set up with git init and populated with the initial commit to branch mybranch
[remote "private"]
push = +:
url = /path/to/local/private/repo
[merge "keepmine"]
name = dont_merge_selected_files
driver = echo %O %A %B
[branch "master"]
remote = origin
merge …Run Code Online (Sandbox Code Playgroud) 当你将代码保存在公共git仓库中时,如何处理秘密API密钥,哈希盐等敏感数据?
显然,将敏感数据保留在代码中会对其造成损害.
另一种解决方案是不对代码中的秘密信息进行硬编码,而是将其存储在独立文件中并对文件进行gitignore.这样做的缺点是,当有人第一次提取您的代码时,秘密信息将会丢失,并且不会开箱即用.这可以通过在代码中编写"初始化,如果缺少"例程来解释,但是然后你让git系统滑入你的代码,这对IMO来说不是一件好事.
另一个解决方案是制作一个"默认"秘密信息文件,在项目开始时提交它,然后使用您自己的信息而不提交它.但这可能会让git抱怨你在拉动时有未提交的更改.
那么处理这个问题的常用方法是什么?
我正在开发一个涉及使用非常敏感数据的项目,并且我已被指示仅通过自定义文件传输系统在线传输此数据.项目本身在git源代码控制之下,包含一个包含敏感数据的sqlite文件.
到目前为止,我只是忽略了通过该gitignore文件的sqlite 文件,这阻止了它被推送到远程存储库.但是,我现在已经达到了项目的一个点,我们有一个实时版本和一个开发版本,并且数据没有在本地跟踪这一事实使得使用分支非常困难.
所以我的问题是:有没有办法让我在本地跟踪sqlite文件,所以我可以在不同的分支上拥有不同的数据版本,但从未将它推送到远程存储库?
在阅读了这个问题后,我考虑过只使用本地的开发分支使用不同的gitignore文件,但是git merge远程共享分支中的a也会合并对gitignore文件的更改这一事实很快就会变得很麻烦.
我参与的一个研究小组目前将所有代码托管在一个私有SVN存储库中.我们想打开我们的代码并将大部分代码移到Github上.问题是,一些代码是敏感的,不应该打开,但我们仍然希望它在版本控制下.目前,我们在Github上有开放代码,私有代码仍在私有SVN存储库中.有一个很好的方法在一个Git存储库中执行此操作吗?