我是一个由15名开发人员组成的团队,目前正在使用Allfusion Harvest.我们对此并不满意并且环顾四周,由于可用的前端TortoiseHg和MercurialEclipse,我们决定改用Mercurial.
我们目前正在使用已有12年历史的Harvest,我发现目前的工作流程难以转化为Mercurial.我以前使用ClearCase的经验,我们使用类似于以下的模型:
A A A
| | |
B C |
| /| |
C | E
| | /
D E
| /
E
Run Code Online (Sandbox Code Playgroud)
左侧躯干不稳定,中间是测试,右侧是稳定的.现在,我在Mercurial(在一个中央存储库中)重新创建这个分支模型没有问题.这个想法是开发人员然后克隆这个存储库,从不稳定分支出来,做他们的工作,然后与unstable合并.在网上阅读我还没有看到针对超过三个开发人员的团队的Mercurial工作流程,所以我不确定这是否是一个很好的工作流程.
所以有两个问题:
这是一个很好的工作模式吗?
你如何与Mercurial合作?你的团队中有多少人?
编辑:自从提出这个问题以来,我一直使用Gitflow和Github流程.根据发布复杂性和团队规模,两者都很有用.当使用Mercurial时,我已停止使用分支(除稳定/不稳定之外)并使用受Git影响的书签.
我在一家SaaS公司工作,该公司每六周向我们的客户发布新功能和错误修复程序.当我们编写代码更改时,它们会在到达生产服务器之前通过不同的步骤(如状态机).根据是在常规开发周期中进行更改还是作为紧急修复,步骤会有所不同.我们目前正在使用Harvest来管理这些步骤,并跟踪正在向客户发布的代码(功能和错误修复程序包),从这个意义上讲,它运行良好.
不幸的是,从程序员的角度来看,Harvest既昂贵又难以使用.分支和合并是一场噩梦.所以我们正在考虑转向Mercurial.Mercurial似乎在这些领域表现出色.但是,Mercurial似乎不是用于跟踪更改或管理上述过程,而是仅用于SCM.
问:在发布过程中我们有什么选择,当然还有其他SaaS公司(例如Google,Flickr,Facebook,LinkedIn)在将代码发布到生产服务器之前需要质量控制吗?
问:尝试在Mercurial中构建流程是不是一个坏主意,还是我们需要与Mercurial一起使用其他工具?
[编辑] 为了澄清,这是我们(建议的)分支结构.
以下是我们目前在Harvest中的流程:
Hotfix <--> Test Level 1 <--> Test Level 2 <--> Master (Production)
Feature <--> Test <--> Release Test <--> Master (Production)
Run Code Online (Sandbox Code Playgroud)
我不是在寻找一个bug跟踪器,而是一个部署工具,它可以帮助我们跟踪和部署已经过我们的测试人员验证的代码(发布分支中的代码).如果同时处理多个修补程序,我们需要能够一起测试它们,如果有人破坏了代码,我们需要能够"降级"代码,将更改改回工艺流程中的一步.今天,这两个开发人员可以"推动"他们对测试级别1的更改,并且可以同时测试两个更改的系统.如果一个开发人员的更改只有在与其他开发人员的代码一起时才会中断,那么很容易从测试级别1降级.
我发现我在iOS7中实现的BLE协议在启动阶段非常慢.启动顺序相当于我应用程序整个执行时间的68%.
我该怎么做才能让它更快?
我定时了,这就是我得到的.
t dt
37.598 [BLE] Discovered peripheral at RSSI -27 with UUID:XYZ
37.599 0.001 [BLE] Connecting to peripheral
37.602 0.003 [BLE] Scanning stopped
37.685 0.083 [BLE] Peripheral connected
38.48 0.795 [BLE] Discovered service
38.599 0.119 [BLE] Discovered characteristic
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,在发现这项服务之前,有一个巨大的瓶颈.
我的启动代码简化了:
- (void)centralManagerDidUpdateState:(CBCentralManager *)central {
switch (central.state) {
case CBCentralManagerStatePoweredOn:
[central scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:kServiceUuid]]
options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @YES}];
break;
case CBCentralManagerStatePoweredOff:
[central stopScan];
break;
default:
break;
}
}
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {
if (self.discoveredPeripheral != …Run Code Online (Sandbox Code Playgroud) 有没有办法保护自己免受Mercurial身份盗窃?
这种情况是,如果有人故意使用其他开发人员的名称将错误提交到代码中,目的是让该人被解雇或错误记入.
有没有办法阻止这种情况发生或者是非问题?
假设我需要创建可以从中央存储库推送和提取的x存储库.克隆所有这些存储库与将.hg文件夹从中央存储库复制x次到空文件夹之间是否存在实际区别?
我们正在使用一个本地中央存储库,每个人都在推动和拉动.直到最近,此存储库仅包含.hg文件夹.然后有人继续直接在中央存储库中创建了一个没有父级(parent = -1)和子级的"孤岛"变更集.正确的方法是将其添加到本地存储库并推送更改.
有没有办法让中央存储库的工作副本返回到只包含.hg并且不与特定变更集关联的状态?
我已经读过以前的帖子,其他成员有与我一样的错误信息,但他们接受的解决方案似乎没有帮助.
基本上,当我尝试加载index.html时,我在Chrome控制台中得到了这个:
Uncaught Error: Module name "underscore" has not been loaded yet for context: _. Use require([])
Run Code Online (Sandbox Code Playgroud)
几秒钟后,这会出现:
Uncaught Error: Load timeout for modules: underscore,backbone
Run Code Online (Sandbox Code Playgroud)
在day_view.js正常加载(200 OK)之前,Chrome网络工具不显示任何异常.
文件结构

的index.html
...
<script>
var require = {
deps: ["jquery/jquery-min", "underscore/underscore-min", "backbone/backbone-min"]
};
</script>
<script data-main="scripts/main" src="scripts/require.js"></script>
...
Run Code Online (Sandbox Code Playgroud)
main.js
require.config({
baseUrl: 'scripts',
paths:{
jquery:'jquery/jquery-min',
underscore:'underscore/underscore-min',
backbone:'backbone/backbone-min'
},
shim: {
underscore: {
exports: '_'
},
backbone: {
deps: ["underscore/underscore-min", "jquery/jquery-min"],
exports: "Backbone"
}
},
waitSeconds: 200
});
require(['day_view'], function (day_view) {
function start() { …Run Code Online (Sandbox Code Playgroud) 考虑以下代码:
myObj = new BackboneModel({'a_key': {'c_key': c_val, 'd_key': d_val}, 'b_key': b_value});
localStorage.setItem('myObj', myObj);
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用Chrome开发人员工具检查数据,我会得到:
> myObj
r {cid: "c1", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}
> localStorage
Storage {myObj: "[object Object]"}
> myObj.get('a_key')
Object {c_key: Object, d_key: Object}
> localStorage.getItem('myObj')
"[object Object]"
Run Code Online (Sandbox Code Playgroud)
即)我没有得到我设定的...
我错误地使用localStorage了吗?
我怎样才能得到我设定的内容?
注意:我认为我的backbone.js模型的细节在这里是无关紧要的.
解决了
// Set
var objDict = {'a_key': {'c_key': c_val, 'd_key': d_val}, 'b_key': b_value};
myObj = new BackboneModel(objDict);
localStorage.setItem('myObj', objDict);
...
// Get
var objDict = JSON.parse(localStorage.getItem('myObj'));
myObj = new BackboneModel(objDict);
Run Code Online (Sandbox Code Playgroud) 我想扩展一个NSMutableArray像队列一样的选择器
- (id)dequeue {
id obj = nil;
if ([self count] > 0) {
id obj = [self objectAtIndex:0];
if (obj != nil) {
[self removeObjectAtIndex:0];
}
}
return obj;
}
Run Code Online (Sandbox Code Playgroud)
问题是我启用了ARC并且obj指向的数据被释放,removeObjectAtIndex:因此dequeue总是返回null.
什么是解决这个问题的优雅方式,还是我的方法完全错误?
编辑 这是由一个错字引起的,与ARC无关.
我有这个代码。
- (void)scheduleTimerAfterDelay:(NSTimeInterval)delay {
dispatch_async(dispatch_get_main_queue(), ^{
_timer = [NSTimer scheduledTimerWithTimeInterval:delay
target:self
selector:@selector(triggerTimer:)
userInfo:[NSString stringWithFormat:@"%f", delay]
repeats:NO];
});
}
- (void)triggerTimer:(NSTimer *)timer {
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Triggered timer after %@ s.", _timer.userInfo); // <-- Exception thrown!
// Do stuff
});
}
Run Code Online (Sandbox Code Playgroud)
但是,当计时器触发时,_timer.userInfo会导致Exception: EXC_BAD_ACCESS (code=1, address=0xc))。
我在这里错过了什么?在异常行的断点处打印_timer表示_timer为<__NSCFTimer: 0x14ec8cb0>。但是我也无法通过lldb访问userInfo。我正在使用ARC。
mercurial ×5
objective-c ×3
backbone.js ×2
html5 ×2
ios7 ×2
javascript ×2
harvest ×1
ios ×1
nstimer ×1
requirejs ×1
saas ×1
security ×1
verification ×1
workflow ×1