我们的团队在工作中热情地采用了rebase工作流程,但我们可能会有一点被带走,这就是这个问题的关键点:你是法官.
使用pull --rebase现在对我来说很简单.但是,我们还有多个人工作的大型功能分支.我们希望定期引入master上发生的变化.传统智慧会让我们合并,因为它是一个共享的分支.然而,在我们的反思中,我们决定改变那些分支机构.当然这需要大家的合作.工作流程如下:
1)rebaser与每个人协调,以确保他们全部签入并推入功能分支,然后要求他们不再在该分支上工作,直到他们全部清除.
2)rebaser将功能分支重新绑定到master上,删除远程功能分支(git push origin:feature),然后推送新的,重新定义的功能分支(git push origin功能)
3)rebaser让每个人都获取,更新他们的功能分支,然后删除他们的本地功能分支(git branch -D功能),然后创建一个跟踪远程功能分支的新本地功能分支.然后每个人都清楚了.
此工作流程正在运行,部分原因是我们是一个小组,工作中断很小.但是,我担心我们正在学习较差的Git习惯(重新定义共享分支),或者工作流程不能很好地扩展.
从好的方面来说,我们的存储库历史很可爱.
你觉得怎么样,Git大师?我们玩火还是摇摆合理的工作流程?
更新:
我问这个问题已经两年了,从那时起我的工作流程发生了变化.我们仍然经常做git pull --rebase
,所以没有改变.这是常识,它可以防止所有难看的,令人困惑的迷你合并.(我们大多保持同步,所以成本很低git pull --rebase
).
然而,除此之外,以及偶尔的纠正错误的英勇行动,我们已经超过了我们的疯狂.合并在大多数时候都很有意义.然而,肆意合并是有问题的,并且确实导致了我两年前关注的混乱,混乱的历史.
我们的解决方案有几个组件
主分支是"原始的".主题分支将合并进入,一旦完成,主题分支就会退出.换句话说,合并主题分支表示该工作已准备好进行生产,现在是主分支的一部分.看看我们的版本历史,很清楚发生了什么:主题分支被合并到主人,就是这样.
我们在必要时使用一次性集成分支.例如,如果我们有主题分支A,B和C,并且它们都没有准备好集成到master中,但是我们需要一起测试它们,我们只需创建一个QA分支(通常不在master下),然后合并A,B和C in.在某些时候,QA分支被删除或重新使用.关键在于它不是以任何方式永久保留,并且它与主分支没有相同的限制(您可以根据需要在主题分支中合并多次).如果历史变得过于混乱,您可以删除QA分支并重新开始(我们发现这种方法非常自然).
合并时,请始终使用git merge --no-ff
.这与两年前我们对"线性承诺历史"的痴迷有着巨大的逆转,值得评论.现在我们已经放松了线性提交历史,并且看到合并是好的和有用的,我们已经开始依赖主题分支作为master的实际分支,而不仅仅是一系列提交最终成为master的提交. git merge --no-ff
确保始终进行合并提交,即使没有必要也是如此.
我们对提交消息和分支有一个很好理解的约定,更重要的是,它交叉引用了我们的问题跟踪系统.我们的问题跟踪系统使用数字问题编号,对于任何功能(或缺陷),我们都有一个问题编号(例如1234).如果您正在处理该问题,那么您将创建一个分支_1234
并启动每个提交消息"_1234: doing blah blah"
.它似乎有点过于强迫,但它确实对我们有效,并且显着减少/消除了混乱.
使用git包装器来鼓励工作流程粘合.这是我们目前正在努力的事情,但我们已经意识到完全有必要防止出现简单易懂的错误,例如分离出错误的东西(当开发人员从一次性创建主题分支时,我们最近遇到了彻底的灾难QA分支:该主题分支被批准上线,它被合并在......并且一些未被批准上线的转换器被吸入了.每当你做一些不寻常的事情时,我们的git包装器都需要确认(比如创建一个除了master之外的任何分支,创建一个不是名为_NNNN的分支,进行一个不以_NNNN开头的提交,等等).偶尔,我们确实需要做这些事情,所以包装器不会阻止它,但它确实让人们不小心做了他们不应该做的事情.
如何在reactstrap Dropdown中设置所选项目?
有下拉列表的示例:https://reactstrap.github.io/components/dropdowns/
当我在下拉列表中选择项目时,它不会显示.
*******************工作方案*****************************
import React from "react";
import {ButtonDropdown, DropdownItem, DropdownMenu, DropdownToggle} from "reactstrap";
import superagent from "superagent";
class BootstrapSelect extends React.Component {
constructor(props) {
super(props);
this.toggle = this.toggle.bind(this);
this.changeValue = this.changeValue.bind(this);
this.state = {
actions: [],
dropDownValue: 'Select action',
dropdownOpen: false
};
}
toggle(event) {
this.setState({
dropdownOpen: !this.state.dropdownOpen
});
}
changeValue(e) {
this.setState({dropDownValue: e.currentTarget.textContent});
let id = e.currentTarget.getAttribute("id");
console.log(id);
}
componentDidMount() {
superagent
.get('/getActions')
.type('application/json; charset=utf-8')
.end(function (err, res) {
console.log(res.body);
this.setState({actions: res.body});
}.bind(this)); …
Run Code Online (Sandbox Code Playgroud) 这个问题是关于阈值,Math.Floor(double)
并Math.Ceiling(double)
决定给你前一个或下一个整数值.我不安地发现阈值似乎与之无关Double.Epsilon
,这是可用双精度表示的最小值.例如:
double x = 3.0;
Console.WriteLine( Math.Floor( x - Double.Epsilon ) ); // expected 2, got 3
Console.WriteLine( Math.Ceiling( x + Double.Epsilon) ); // expected 4, got 3
Run Code Online (Sandbox Code Playgroud)
即使乘以Double.Epsilon
一点点也不能解决问题:
Console.WriteLine( Math.Floor( x - Double.Epsilon*1000 ) ); // expected 2, got 3
Console.WriteLine( Math.Ceiling( x + Double.Epsilon*1000) ); // expected 4, got 3
Run Code Online (Sandbox Code Playgroud)
通过一些实验,我能够确定阈值大约在2.2E-16附近,这非常小,但是比V大得多Double.Epsilon
.
出现这个问题的原因是我试图用公式计算数字中的位数var digits = Math.Floor( Math.Log( n, 10 ) ) + 1
.这个公式不起作用n=1000
(我偶然偶然发现),因为它Math.Log( 1000, …
我正在为代码学校的一个项目进行单元测试,并.equals()
给我一些麻烦.在我的项目中,.save()
保存到SQL数据库中.此代码通过了单元测试:
@Test
public void save_assignsNameToObject() {
Restaurant testRestaurant = new Restaurant("PokPok","503-444-4444");
testRestaurant.save();
Restaurant savedRestaurant = Restaurant.all.get(0);
assertEquals(savedRestaurant.getName(), "PokPok");
}
Run Code Online (Sandbox Code Playgroud)
但是如果我将最后一行更改为以下内容,则会导致断言错误:
assertTrue(savedRestaurant.equals(testRestaurant));
Run Code Online (Sandbox Code Playgroud)
我调试使用System.out.println()
来验证两个值都在testRestaurant
".equal"中的相应值savedRestaurant
.以下单元测试(对于另一个非常相似的类的对象)使用以下.equals()
方法:
@Test
public void save_assignsIdToObject_true() {
Cuisine testCuisine = new Cuisine("Mexican");
testCuisine.save();
Cuisine savedCuisine = Cuisine.all().get(0);
assertTrue(savedCuisine.equals(testCuisine));
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是我的源代码.equals()
:
@Override
public boolean equals(Object otherRestaurant) {
if (!(otherRestaurant instanceof Restaurant)) {
return false;
} else {
Restaurant newRestaurant = (Restaurant) otherRestaurant;
return this.getId() == new Restaurant.getId() …
Run Code Online (Sandbox Code Playgroud) 当我设置关联时,有没有办法使用Sequelize(sequelizejs.com)输出神奇地在对象上创建的所有函数.
例如; 我有一个用户模型,我设置
User.belongsToMany(User, { as: 'Friends', through: 'UserFriend' });
现在我可以打电话了
User.create({
name: Faker.name.findName()
}).then((user) => {
user.createFriend({
name: Faker.name.findName()
})
});
Run Code Online (Sandbox Code Playgroud)
createFriend
由于belongsToMany关系,该功能是可能的.
有没有办法输出在用户(或用户)上创建的所有功能?
有时对我来说,我不能清楚我可以调用一个对象,如果我能以某种方式输出它会对我有所帮助.
如果这是一个多余的问题,请随时解答我.(在我询问之前,我已尽可能多地搜索)
我拼命想要了解请求/响应对象的生命周期.
请考虑以下框架代码:
app.get('/', function(req, res) {
var setCookie = function(err, idCookie) { //callback after cookieSearch in DB
// ... do something with the result of findCookieInDatabase() (handle error, etc.);
res.sendfile('index.html');
}
var cookie = parseCookie(req.get('Cookie')); //parse and format cookie
findCookieInDatabase(cookie, afterCookieSearch); //tries to find cookie is DB
// .. do some content return stuff, etc.
}
Run Code Online (Sandbox Code Playgroud)
(请注意,原始代码更多,例如检查'Cookie'是否存在等等)
我理解创建了req和res对象,并且必须在某些时候收集垃圾.(人们希望)
当使用setCookie作为参数调用findCookieInDatabase()时,我假设setCookie当时只是一个字符串(包含函数),并且在findCookieInDatabase()中遇到callback(setCookie)语句之前不会被解析或执行.
我也明白,我可能完全错误的上述假设,这可能是由于我对javascript回调的胆量缺乏了解.(我在这方面也进行了很多搜索,但我发现的是如何使用回调的无穷无尽的东西.没有什么在引擎盖下)
所以问题是:javascript(或node.js)如何知道保持'res'活着多久以及什么时候可以垃圾收集呢?
setCookie中的行res.sendfile是否实际上充当了活动引用,因为它是通过findCookieInDatabase()调用的?
javascript是否实际上跟踪所有引用并保持req和/或res,只要任何被调用/回调/事件的任何部分都存活?
任何帮助非常感谢.谢谢阅读.
我正在尝试使用Interface Builder连接滚动视图,并且UIScrollViewDelegate.scrollViewDidScroll
不会在滚动时调用该方法.
在IB中,我有一个使用my PagedScrollViewController
作为自定义类的视图控制器.在那堂课上,我有:
class PagedScrollViewController: UIViewController, UIScrollViewDelegate {
func scrollViewDidScroll(scrollView: UIScrollView!) {
println("scrollViewDidScroll")
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这println
永远不会被调用.我知道PagedScrollViewController
正确连接,因为如果我添加一个viewDidLoad
方法,它会被调用.除了设置自定义类之外,是否需要额外添加委托?
我正在地图中绘制一个圆圈(在用户的当前位置),我希望屏幕可以缩放以使整个圆圈具有一定的余量.我现在在做什么:
drawCercleAroundPin(_googleMap, DataManager.RADIUS_SEARCH_CERCLE, _location);
moveCamera(_googleMap, (10 / ((DataManager.RADIUS_SEARCH_CERCLE / 900) + 1))+10, 2000, _location, null);
Run Code Online (Sandbox Code Playgroud)
好吧,我尝试了一些愚蠢的微积分,因为我无法找到合适的解决方案......
有没有人有想法?
java ×2
android ×1
c# ×1
callback ×1
components ×1
express ×1
git ×1
google-maps ×1
javascript ×1
lifecycle ×1
math ×1
postgresql ×1
reactjs ×1
reactstrap ×1
rebase ×1
sequelize.js ×1
swift ×1
uikit ×1
unit-testing ×1
xcode6 ×1