5

我正在使用 git 针对 subversion 中托管的项目进行开发,使用 git-svn:

git svn clone svn://project/

我的一般工作流程是在主分支上反复编辑和提交,然后通过以下方式提交到 svn 存储库:

git stash
git svn dcommit
git stash apply

'stash' 命令保留的本地修改之一,我不想提交到 svn 存储库,是更改的数据库连接字符串。在没有额外的“存储”步骤的情况下保持这种本地更改的最方便的方法是什么?

我怀疑像 'stash' 或 'quilt' 之类的东西是我正在寻找的东西,但我仍然对 git 足够新,我认为我错过了一些会导致确切咒语的术语。

更新:我发现似乎避免 ++ 系列的唯一解决方案git stash是手动更新 git-svn ref:git-svn actiongit stash apply

(check in local-only change to 'master', then...)
$ cat .git/refs/master > .git/refs/remote/git-svn
$ git svn fetch (with at least one new SVN revision)

这使得仅本地提交成为两个 svn 修订之间的奇怪(可能不安全)提交。

4

4 回答 4

2

一种可能的方法是使用仅本地修改的“本地”分支,并从中分支“工作”分支。在此设置中,您可以:

git checkout work
git checkout -b work_tmp
git rebase --onto master local work_tmp
git checkout master
git merge work_tmp
git branch -D work_tmp
git svn dcommit master

(自然而然地为它创建一个shell脚本)

我刚开始在一个项目中使用它,这种方法可能有缺点。

于 2010-03-19T12:50:06.653 回答
1

我必须同意,真正的解决方案是不要提交不属于存储库的东西。我会去找你试图说服的人,告诉他你想添加一个机制,你可以用你在本地系统上添加的文件覆盖默认属性。

例如,当属性重命名时,没有干净的方法可以解决可能发生的合并冲突。所以我认为你正在寻找一个实施不善的解决方案的黑客,这就是为什么对你的问题没有直接的答案似乎是不成熟的。

于 2010-05-11T06:44:53.100 回答
0

不完全是您问题的 git 答案,但仍然很有用:

django 圈子中的标准做法是将数据库连接等包含在一个不在存储库中的本地文件中,称为 localsettings.py

该文件对于您部署的每个环境都是唯一的;它有助于在 repo 中包含一个示例文件,例如 localsettings.py.example

否则,包括所有 repos 的配置文件并实施基础设施以根据主机名查询适当的配置文件。

于 2010-03-02T15:26:25.780 回答
0

我在 git svn 旁边使用 stg(它是被子但与 git 集成)。

我在 stg 中有补丁,以我不想发送到上游的方式修补构建系统 - 这就像你的数据库补丁。

要应用补丁:

stg pop -a stg push patch-name-that-i-want-to-apply git svn dcommit

或针对最新的 SVN 进行变基:

git svn fetch stg rebase trunk (或任何你的 svn 分支)

于 2010-03-02T22:37:19.657 回答