上下文是这样的:
一个包在多个存储库中开发了多个分支
- 吱吱声源
- 来源.squeak.org/trunk
开发在 source.squeak.org 中停止,目标是将分支转移回 squeaksource,以便在单个存储库中发布所有版本。
但是为了便于人工浏览和快速识别分支,我希望在 squeaksource 副本的名称中添加一个标准的分支识别。
有没有办法自动化这个操作?可能和Gofer一起?
上下文是这样的:
一个包在多个存储库中开发了多个分支
开发在 source.squeak.org 中停止,目标是将分支转移回 squeaksource,以便在单个存储库中发布所有版本。
但是为了便于人工浏览和快速识别分支,我希望在 squeaksource 副本的名称中添加一个标准的分支识别。
有没有办法自动化这个操作?可能和Gofer一起?
Monticello 包是不可变的。您可以轻松地移动版本,但不应重命名文件。如果这样做,您将破坏历史并失去将版本合并到您的版本树中以及与其他人的贡献合并的能力。
要将包A的所有版本从源 url移动到目标 url,您可以使用:
Gofer new
repository: 'source url';
package: 'A';
fetch
" If you understand the concequences you could rename/rebranch the version files in your package-cache at this point. "
Gofer new
repository: 'target url';
package: 'A';
push
一个更神秘的解决方案,它避免了后续的 Monticello 包的序列化和反序列化。这对于非常大的存储库很有用,并且可以大大加快复制速度:
| sourceRepositoryUrl destinationRepositoryUrl files |
repositoryUrl := 'http://www.squeaksource.com/PROJECT'.
destinationRepositoryUrl := 'http://smalltalkhub.com/mc/USER/PROJECT/main'.
files := (MCHttpRepository new
parseFileNamesFromStream: (ZnClient new get: repositoryUrl; entity) readStream)
select: [ :each | ZnMonticelloServerDelegate new isValidMczName: each ].
files do: [ :fileName ||entity stream|
Transcript show: fileName; cr.
"download version"
entity := ZnClient new
beOneShot;
url: repositoryUrl;
addPath: fileName;
get;
entity.
"upload the version to gemstone"
ZnClient new
beOneShot;
ifFail: [ :exception | Transcript show: fileName; show: ' '; print: exception ];
username: 'USER' password: 'PASSWORD';
entity: entity;
url: destinationRepositoryUrl;
addPath: fileName;
put ]
displayingProgress: [ :fileName| 'Copying ', fileName]