小编Eth*_*own的帖子

Git工作流:重新发布已发布/共享的分支

我们的团队在工作中热情地采用了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开头的提交,等等).偶尔,我们确实需要做这些事情,所以包装器不会阻止它,但它确实让人们不小心做了他们不应该做的事情.

git rebase

40
推荐指数
1
解决办法
6723
查看次数

如何在reactstrap Dropdown中设置所选项目?

如何在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)

components reactjs reactstrap

13
推荐指数
1
解决办法
1万
查看次数

Math.Floor(double)和Math.Ceiling(double)的意外行为

这个问题是关于阈值,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, …

c# floating-point

10
推荐指数
2
解决办法
534
查看次数

为什么.equals()在比较两个对象时会导致断言错误...但有时只会?

我正在为代码学校的一个项目进行单元测试,并.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)

java postgresql unit-testing

6
推荐指数
1
解决办法
2257
查看次数

Sequelize对象上的函数列表

当我设置关联时,有没有办法使用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关系,该功能是可能的.

有没有办法输出在用户(或用户)上创建的所有功能?

有时对我来说,我不能清楚我可以调用一个对象,如果我能以某种方式输出它会对我有所帮助.

sequelize.js

6
推荐指数
2
解决办法
3176
查看次数

express.js使用回调时的请求/响应对象生命周期

如果这是一个多余的问题,请随时解答我.(在我询问之前,我已尽可能多地搜索)

我拼命想要了解请求/响应对象的生命周期.

请考虑以下框架代码:

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,只要任何被调用/回调/事件的任何部分都存活?

任何帮助非常感谢.谢谢阅读.

javascript lifecycle garbage-collection callback express

4
推荐指数
1
解决办法
4678
查看次数

UIScrollViewDelegate.scrollViewDidScroll没有被调用(Swift/Interface Builder/Xcode 6)

我正在尝试使用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方法,它会被调用.除了设置自定义类之外,是否需要额外添加委托?

interface-builder uikit swift xcode6

4
推荐指数
1
解决办法
9533
查看次数

谷歌地图api V2调整大小屏幕以匹配绘制的圆圈

我正在地图中绘制一个圆圈(在用户的当前位置),我希望屏幕可以缩放以使整个圆圈具有一定的余量.我现在在做什么:

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 math android google-maps google-maps-android-api-2

2
推荐指数
1
解决办法
3473
查看次数