You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在git-svn dcommit时排除.git*文件不提交至SVN仓库

解决git-svn本地追踪.gitignore/.gitattributes但不推送到SVN的问题

嘿,刚好我之前处理过一模一样的git-svn场景,给你几个实用的方案,完美匹配你的需求:

方法1:配置git-svn的忽略路径(首推!持久又省心)

你可以直接给git-svn加个专属规则,让它执行dcommit时自动跳过这两个文件。在本地仓库根目录跑下面这行命令就行:

git config svn-remote.svn.ignore-paths "^\\.gitignore$|^\\.gitattributes$"

这里的正则表达式专门匹配根目录下的.gitignore.gitattributes,dcommit的时候git-svn会自动无视它们,完全不会推到SVN仓库里。要是你的这两个文件在子目录里,比如src/下,就把正则改成^src/\\.gitignore$|^src/\\.gitattributes$就行,灵活调整。

方法2:用assume-unchanged标记(适合临时场景)

如果只是临时不想推这两个文件,或者想保留本地修改但暂时不提交到SVN,可以给这两个文件打个“假不变”标记:

git update-index --assume-unchanged .gitignore .gitattributes

这样git会认为这俩文件没改动,dcommit自然不会管它们。之后要是哪天需要取消这个限制(虽然你说绝不能提交,但留个退路总没错),就跑:

git update-index --no-assume-unchanged .gitignore .gitattributes

不过这个方法有个小缺点:切换分支或者拉SVN更新后,可能得重新标记,不如方法1持久。

方法3:smudge/clean过滤器(进阶玩法,一般用不上)

要是你的.gitattributes本身是用来做文件格式转换的,还能通过git的过滤器机制,让git-svn在dcommit时“隐身”这两个文件。不过这个配置起来有点繁琐,方法1已经足够解决问题了,就不多展开啦。

小提醒

别忘了先在本地Git仓库里提交这两个文件哦:

git add .gitignore .gitattributes && git commit -m "Add git ignore and attributes files"

这样本地就能正常追踪它们的变更,同时SVN那边完全看不到它们的存在。

内容的提问来源于stack exchange,提问作者Johann Studanski

火山引擎 最新活动