Edición manual usando git add –patch <nombre de file>

Entonces, tengo un file en el que he estado trabajando en la twig A, y estoy a punto de comprometerlo. Sin embargo, mirando el diff, creo que es mejor ponerlo en dos commits separados (Bueno, en este caso, dos twigs separadas, tal vez). He usado git add –patch antes de crear trozos separados, así que pensé que podría usar esto. El problema es que necesito dividir uno de mis tíos. Ejecutando git add --patch SdA.py y usando e para editar el problema hunk …

 # Manual hunk edit mode -- see bottom for a quick guide @@ -50,13 +50,74 @@ import PIL.Image as im import constant + +def exp_range(min=None, max=None, step=None): + """ + Generate an exponentially increasing value scaled and offset such + that it covers the range (min, max]. Behaviour is similar to + exp(x), scaled such that the final value generated is equal to + 'max'. 'step' defines the granularity of the exponential + function. The default value is 5, corresponding to a step-size + of tau. + + :type min: float + :param min: minimum value of range (offset) + + :type max: float + :param max: Maximum (final) value of range + + :type step: int + :param step: Number of incremental steps within the range + (min, max] + + """ + if min is None: + raise StopIteration + + # One input argument (same as range(10)) + if min is not None and max is None and step is None: + step = min + min = 0. + max = 1. + elif step is None: + step = 5 + + for i in xrange(step): + exp_rate = np.exp(i - (step-1)) + yield min + (max - min) * exp_rate + raise StopIteration + + def norm(input): + """ + Return the norm of a vector or row-wise norm of a matrix + + :type input: theano.tensor.TensorType + :param input: Theano array or matrix to take the norm of. + + """ return T.sqrt((input * input).sum(axis=0)) def normalize(vector, scale=1.0, offset=0.5): + """ + Normalize (Zero and scale) a vector such that it's peak to peak + value is equal to 'scale', and it is centenetworking about 'offset'. + + :type vector: numpy.ndarray + :param vector: Vector to normalize to the given parameters. + + :type scale: float + :param scale: Peak-to-peak range to stretch or shrink the vector's + current peak-to-peak range to. + + :type offset: float + :param offset: Value at which to center the peak-to-peak range at. + + """ return (vector - vector.min()) * scale / vector.ptp() + 

Esta bien. Hay una mini guía en la parte inferior. Lo entiendo. Entonces, queremos poner la nueva function en este compromiso, y la documentation para las otras funciones en otro compromiso. De acuerdo con el mini-documento: # To remove '+' lines, delete them.

 # Manual hunk edit mode -- see bottom for a quick guide @@ -50,13 +50,74 @@ import PIL.Image as im import constant + +def exp_range(min=None, max=None, step=None): + """ + Generate an exponentially increasing value scaled and offset such + that it covers the range (min, max]. Behaviour is similar to + exp(x), scaled such that the final value generated is equal to + 'max'. 'step' defines the granularity of the exponential + function. The default value is 5, corresponding to a step-size + of tau. + + :type min: float + :param min: minimum value of range (offset) + + :type max: float + :param max: Maximum (final) value of range + + :type step: int + :param step: Number of incremental steps within the range + (min, max] + + """ + if min is None: + raise StopIteration + + # One input argument (same as range(10)) + if min is not None and max is None and step is None: + step = min + min = 0. + max = 1. + elif step is None: + step = 5 + + for i in xrange(step): + exp_rate = np.exp(i - (step-1)) + yield min + (max - min) * exp_rate + raise StopIteration + + def norm(input): return T.sqrt((input * input).sum(axis=0)) def normalize(vector, scale=1.0, offset=0.5): return (vector - vector.min()) * scale / vector.ptp() 

Eso se ve bien. Vamos a agregar ese cachorro …

 error: patch failed: SdA.py:50 error: SdA.py: patch does not apply Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]? 

Mmkay … git add –interactive "Su trozo editado no se aplica" y ¿Cómo leer la salida de git diff? explicar que tengo que actualizar los numbers de línea afectados. Para hacer esto, ahora puedo contar manualmente y decir "Hmm, he eliminado 1, 2, 3 … 23 líneas. Estaba editando 74 líneas previamente, ahora estoy editando … hmm … deseo Tenía una calculadora … .51 líneas "('por supuesto, estoy sudando')

Esto parece un método demasiado complicado. Todavía creo que el parche es el enfoque correcto, pero debo estar haciendo algo mal si necesito actualizar manualmente el número de líneas afectadas en el file. ¿Alguien tiene algún consejo sobre cómo hacer esto de manera más fácil y eficiente?

Comentando las líneas con # lugar de eliminarlas resuelve este problema. No estoy seguro de si el comportamiento es parte de emacs, pero al comentar una línea en realidad disminuye el contador en la parte superior del post de parche. Otra característica que encontré útil fue usar s para dividir primero el trozo, luego agregar cada uno de forma independiente. En este ejemplo particular, esa hubiera sido la mejor solución.

Hay GUI de Git que facilitan la selección selectiva de líneas, todo lo que tienes que hacer es seleccionar líneas individuales y agregarlas, sin necesidad de editar hunks manualmente.

Dos de estas GUI son SourceTree y Git Cola .