我们希望从 svn 永久迁移到 git,以便能够在分支和协作方面使用 git 更好的功能。
我们当前的 svn 存储库看起来像这样
svnrepo/
frontend/
trunk
branches/
ng/
...
tags/
1.x
...
backend/
trunk
branches/
ng/
...
tags/
1.x
...
Run Code Online (Sandbox Code Playgroud)
工作布局是我们检出前端项目,并在其中创建一个后端文件夹并检出后端项目。
我们现在想迁移到 git,并放弃前端和后端之间的拆分(就独立项目而言),因为它给我们带来的问题多于优势。我们希望它们都在一个 git 存储库中。
我想使用svn2git进行转换。不幸的是,最新的开发都发生在一个分支中,而不是在主干中,但我认为这对于 svn2git 来说应该不是问题。因此,新的 git 存储库布局应如下所示:
/ => svnrepo/frontend/branches/ng
/backend => svnrepo/backend/branches/ng
Run Code Online (Sandbox Code Playgroud)
其中 => 表示“迁移/转换自”。
对于转换,我们没有必要将 svn 存储库中的所有标签和分支转换为 git。这对我们来说并不重要。然而重要的是,我们拥有所有提交到分支/ng 目录中的所有文件的完整历史记录,返回到主干分支以及之前发生在主干中的所有提交。我们希望所有这些提交都在单个 git 存储库中具有上述布局。这甚至可能吗?我们将如何做到这一点?
我正在学习 Salt Stack 以将我的 Python 应用程序部署到 AWS 上的各个生产阶段。现在我在一个大存储库中拥有我所有的源代码和盐状态。
将 minion 状态文件保存在我的源中是否有任何实际或安全考虑?或者我应该把它们分开,为什么?
如果我确实将我的状态文件移动到一个单独的 salt-states 存储库中,我应该在哪里保存我的master和minion配置文件,或者它们不属于版本控制?
我目前正在调查是否可以在类似于 gitolite 为 git 所做的设置中为 bzr 提供服务。这意味着一个 unix 帐户,通过他们的 ssh 公钥管理不同的用户。我很乐意将其与 gitolite 集成,在这种情况下,~/.ssh/authorized_keys可以委托用户管理和创建合适的。这将处理身份验证。
让我担心的是授权。在我看来,bzr serve开箱即用只有--directory提供访问控制的标志。这适用于为每个用户提供他或她自己的一组存储库,或者用于将用户分配到组并为每个组提供一组固定的存储库。多做一点工作,一个用户可以使用一个目录,但使用符号链接允许多个用户共享访问存储库。
尽管如此,这仍然远不及gitolite所能做到的。使用这种方法,不可能授予单个用户对某些存储库的只读访问权限,但授予对其他存储库的读写访问权限。也无法防止覆盖推送或在用户目录中创建新存储库。
可能是这些功能还没有实现。在相关的 Stack Overflow 问题中,我问的是如何自己实现这一点。在服务器故障上,我专注于现有的解决方案。是否有任何现成的解决方案赋予bzr serve比简单--directory限制更细粒度的访问控制?像 gitolite 这样的完全集成的解决方案将是最有趣的,但即使是一些可能被配置为解决我提到的问题之一的扩展也会很高兴知道。
我有包含多个项目的 Subversion 存储库,现在我试图将每个项目分成自己的存储库。
系统:
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
# rpm -q subversion
subversion-1.6.11-12.el5_10
#
Run Code Online (Sandbox Code Playgroud)
颠覆:
$ svnadmin dump http://svn/repo1/proj1/
svnadmin: E205000: 'http://svn/repo1/proj1/' is a URL when it should be a local path
$
Run Code Online (Sandbox Code Playgroud)
根据以下文档 - svnadmin—Subversion Repository Administration
由于 svnadmin 通过直接存储库访问工作(因此只能在拥有存储库的机器上使用),因此它使用路径而不是 URL 来引用存储库。
这解释了为什么它对我不起作用。还有哪些其他替代方法可以实现这一目标?
我想从我的 OS X 机器上提供基于 CGI 的 Mercurial 存储库,但我终生找不到 hgweb.cgi 文件,我认为这是该过程的第 1 步。
我的 Mercurial 安装来自 OSX 二进制包安装,并且位于/usr/local. python 库安装在/Library/Python/2.5/site-packages/mercurial:
(~): find /Library/Python/2.5/site-packages/mercurial -name hgweb*
/Library/Python/2.5/site-packages/mercurial/hgweb
/Library/Python/2.5/site-packages/mercurial/hgweb/hgweb_mod.py
/Library/Python/2.5/site-packages/mercurial/hgweb/hgweb_mod.pyc
/Library/Python/2.5/site-packages/mercurial/hgweb/hgweb_mod.pyo
/Library/Python/2.5/site-packages/mercurial/hgweb/hgwebdir_mod.py
/Library/Python/2.5/site-packages/mercurial/hgweb/hgwebdir_mod.pyc
/Library/Python/2.5/site-packages/mercurial/hgweb/hgwebdir_mod.pyo
Run Code Online (Sandbox Code Playgroud)
鉴于此设置,我需要做什么才能为一个或多个存储库提供服务?
我正在寻找最好的方法(就我的目的和情况而言)来版本系统配置文件并管理两台机器(实时和备份,两者都应被视为“生产”)之间的部署(所有权和模式)。我希望能够使用该系统自动(但有选择地)复制和管理备份机器(EC2 实例)上的相关和指定配置。
目前,这些机器主要是 web 和 SMTP 服务器(我们不存储用户邮箱),但我们的项目正在增长,谁知道未来的需求可能是什么。例如,我们有可能在未来某个时候实施广播和基于网络的聊天。
我更喜欢以传统方式管理服务器(即,根据需要进入并更改实时服务器),然后将这些更改(一旦确定)存储在管理系统中。(好吧,老实说,我应该有机地说:我不想失去根据需要和情况做事的灵活性。)我发现这种方法,而不是部署在其他地方经过调整和测试的配置,更可预测,并且有可能减少意外(除了在实时系统上搞砸配置的可能性之外,就是这样!)
我意识到,从哲学上讲,这是从后到前的,如果我有资源(测试基础设施,更重要的是人力),我可能会反过来做。事实上,我必须用我所拥有的来凑合。我很喜欢结构,但是过多的基础设施会失去它自己的生命,并且在某些时候它的价值会丢失。
我做了一些功课并审查了几个选项,但它们似乎都没有真正按照我的意愿行事,因此我目前很想推出自己的解决方案。这个问题的目的是看看我没有想到什么,并在我去吠错树之前进行理智检查。
像木偶,声明metaconfiguration系统特别,可能是不错的选择,许多服务器都参与了他们之间几乎没有差异,特别是当它的时间提前明确应该看什么样的配置等。我认为在没有临时基础设施的情况下使用这样的工具是不明智的。
它也有点重量级和过于复杂。我是唯一的管理员,我在业余时间做这件事,如果发生什么事,我留下的任何东西都需要对跟随我的幸运的男人/女孩保持合理的理智。
etckeeper 可能会,但就我所见,它并不适合管理除 /etc 之外的任何内容。即,它不适合存储传统上位于 /usr/local/bin 中的自定义脚本。此外,etckeeper 大概管理所有/etc,我想我更喜欢只对特定内容进行版本控制(例如 postfix、apache、fail2ban、ssh 和可能的 munin)。
一个简单的 git 或 svn repo 肯定不会做,因为 git 跟踪权限,它不跟踪所有权,而 svn 也不跟踪。
svn.svn在每个跟踪目录中保留一个子目录,而.git仅存在于工作副本的根目录中。这两种情况各有利弊。.svn在某些地方(例如 /etc/apache2/sites-enabled),某个位置的目录的存在可能没问题,但会在其他地方扰乱脑残脚本/工具。(我确定我之前读过一些东西:cron 是否可以与.svn/etc/cron.d 中的目录一起使用,但 depmod 与 /lib/modules 不同?)
另一方面,使用.gitin /,git 将所有内容都视为跟踪的候选对象,甚至(可能)其他 git 存储库!
这是我建议做的:一个存储在主机上的 subversion 存储库(比如 /usr/local/sc-repo)和一个用Pysvn编写的管理脚本,它实现了以下内容:
添加(但默认情况下,不是递归的),它将文件的模式和所有权存储为自定义属性。另外,我喜欢$Id$我的配置文件中的标签,所以这将确保svn:keywords正确设置。
犯罪
更新,在写入文件后应用所有权和模式
恢复,同上
perms,如 …
我在 AWS S3 Object Versioning 上阅读的所有信息都特别提到了这一点:
在您设置版本控制状态之前存储在您的存储桶中的对象的版本 ID 为 null。启用版本控制时,存储桶中的现有对象不会更改。改变的是 Amazon S3 在未来请求中处理对象的方式。本节中的主题解释了启用版本控制的存储桶中的各种对象操作。
我目前在一个存储桶中有大约 2 TB(370K 对象)的数据。我的理解是,如果我现在打开版本控制,那么将来的对象将被版本控制。我的问题:现有的对象呢?我是在没有它们被非版本化的情况下被卡住,还是有办法在不下载/重新上传它们的情况下对它们进行版本控制?我在做 Google Fu 时没有找到任何信息,所以想在这里 ping 集体。
谢谢。
我有三台 Linux 服务器,我创建了 ansible 清单文件:
[web]
192.168.0.155
192.168.0.165
192.168.0.175
Run Code Online (Sandbox Code Playgroud)
我有 playbook.yml:
---
- hosts: web
tasks:
- name: Check drinks versions
shell: "python3.4 {{ item.sw_path }} -v"
sudo: yes
with_items:
- { sw_path: '/home/beer.py' }
- { sw_path: '/home/vodka.py' }
- { sw_path: '/home/whisky.py' }
Run Code Online (Sandbox Code Playgroud)
脚本(beer.py、vodka.py 和whisky.py)以如下格式打印它们的版本:“/home/beer.py 1.0.0”。我需要获取这个版本,将它与我存储在数据库中的版本(这是实际版本)进行比较,如果版本不相等,则将实际版本从 svn(svn 路径也存储在数据库中)复制到服务器。我如何使用 ansible 功能做到这一点?
我正在从 Slicehost 租用一个切片(即 VPS)。我花了一两天的时间来填充/usr我最喜欢的包、/etc配置和初始化脚本等等。现在我想:
保存磁盘映像给了我(1),但不是(2)和(3)。
使用 Subversion ( svn import / svn://someotherhost) 可能会给我所有三个,但如果我实际尝试将项目签出/并维护根拥有的区域中的 .svn 目录,我预计会出现问题。要将我的设置加载到新切片上,我需要先在其上安装 svn 客户端。
有什么好的方法可以做我想做的事吗?
有没有办法执行svn add只添加未版本化文件的命令?
目前,如果我尝试svn add在包含版本化和非版本化文件混合的目录上进行操作,我会收到该mydir/ is already under version control消息。