¿Cómo hacer que GIT trabaje en mi caso?

Tengo una pregunta con respecto a Git. El lugar donde trabajo tiene 2 desarrolladores: yo y otro chico. Ambos desarrollamos un proyecto VB.NET utilizando Visual Studio 2008 y todo el código y los documentos de la empresa están almacenados en un server local central.

Entonces, por el momento, si ambos tenemos que trabajar en el mismo proyecto, copymos el código almacenado en Server1:/Code en nuestra carpeta local de documentos y solo nos decimos qué files estamos usando, por lo que no estamos trabajando en los mismos files. Al final del día copymos nuestros bits al server (asegurándonos de que no anule sus files y viceversa).

He analizado Git y parece que resolverá este tipo de problema de "No cambiar el código de FileA porque lo estoy usando" y nos permitirá trabajar en el mismo proyecto al mismo time: es decir, ambos una copy del código de Server1 y desarrollo y fusionamos ambos al final del día de return al server (¿o estoy equivocado?).

Ahora he leído partes del libro de ProGit y me sale un poco donde agregas files y haces commits, pero no estoy seguro de cómo ambos podremos usarlo de una vez.

Algunas preguntas aquí:

  1. ¿Dónde crearé el repository de Git? El código se almacena en Server1/Code y en Code tenemos varios proyectos, así que supongo que tengo que crear el repository en Server1/Code ?
  2. Después de crear el repository, ¿cómo podemos get una copy de, digamos, el proyecto A almacenado en Server1/Code/ProjectA ? ¿Copiaremos y pegaremos la carpeta o usaremos Git?
  3. Como cada uno de nosotros tendrá nuestra propia copy en My Documents y trabajará en esa copy durante el día, ¿cómo fusionaremos los files al final para que no se pierda nada? Digamos que he creado un nuevo Formulario en VS2008 con un button y un código detrás y el otro ha cambiado algún código en otro lugar. O, por ejemplo, agregué un código a FormA y él también agrega algún código a FormA? ¿Cómo los fusionamos al final?

Como dije, instalé las extensiones git y git en mi pc en casa y jugué con ellas y no me importa usar git bash (línea de command) o git GUI.

Cualquier ayuda será muy apreciada muchachos.

Dada la naturaleza distribuida de Git, hay literalmente cientos de flujos de trabajo diferentes, por lo que este es solo un ejemplo.

Otro ejemplo de un flujo de trabajo popular se describe aquí

¿Dónde crearé el repository de GIT? El código se almacena en Server1 / Code y en Code tenemos varios proyectos, así que supongo que tengo que crear el repository en Server1 / Code?

Debería crear el repository en el Servidor1 / Código:

 git init && git add . && git commit -am "Initial commit" 

Lo anterior agrega todo al repository (es posible que desee excluir algunos files, así que primero coloque lo que desea excluir del repository en un file .gitignore en la raíz del proyecto)

Después de crear el repository, ¿cómo podemos get una copy de, digamos, el proyecto A almacenado en Server1 / Code / ProjectA? ¿Copiaremos y pegaremos la carpeta o usaremos GIT?

Si usa un recurso compartido, puede clonarlo con el modo de file git:

 git clone file:////<host>/<share>/<path> 

Como cada uno de nosotros tendrá nuestra propia copy en Mis documentos y trabajará en esa copy durante el día, ¿cómo fusionaremos los files al final para que no se pierda nada? Digamos que he creado un nuevo Formulario en VS2008 con un button y un código detrás y el otro ha cambiado algún código en otro lugar. O, por ejemplo, agregué un código a FormA y él también agrega algún código a FormA? ¿Cómo los fusionamos al final?

Por lo general, trabajas en una sucursal local:

 git checkout -b local_feature_branch 

Cuando hayas terminado, puedes ver qué cambió en el "server" usando el origen de git fetch. Esto solo actualizará su vista de lo que sucedió en el server, no desplegará los cambios.

Cuando esté listo para enviar sus cambios al server:

1) Confirmar cambios

 git commit -am "My changes" 

2) Despliegue los cambios en el server a su sucursal local:

 git checkout master && git pull origin master 

3) Fusiona o rebase su twig de características a la copy local del maestro

Unir:

 git merge local_feature_branch 

Rebase:

 git checkout local_feature_branch && git rebase master && git checkout master && git merge local_feature_branch 

Lea la diferencia entre merge y rebase en la respuesta a continuación:

Git workflow y rebase vs fusionar preguntas

Si hay un conflicto (por ejemplo, si ambos editan el mismo formulario, etc.), git le informa que hubo un conflicto de fusión y qué files fusionar. Después de hacer la fusión, agrega el file fusionado:

 git add merged_file 

Y cometer:

 git commit -am "Merged with master" 

Finalmente, devuelve los cambios al "server":

 git push origin master 

Si está comenzando con el control de fuente, le sugiero que comience con SVN. Es simplemente más fácil.

http://www.visualsvn.com/server/ – esto le permitirá crear repositorys en minutos.

  1. Puede crear repository donde lo desee. Luego coloque el código que ya tiene en el repository.
  2. Después de eso, instale Tortoise SVN y / o SVNMonitor para actualizar desde / push al repository. Por primera vez, el código de salida del repository. Descargará todo el código en el directory que especifique.
  3. Usando SVN también puedes bloquear el file para editarlo. De esta forma, otra persona no podrá editarlo al mismo time. Pero esto no es una forma de trabajo sugerida. Generalmente, las fusiones no son un problema porque la mayoría de las veces trabajarás en otras cosas, luego en tu compañero de trabajo. Pero si sucede que edita el mismo file, la primera persona tendrá éxito en el logging y la otra persona recibirá el post de que alguien cambió ese file. Luego tendrá que actualizar su versión del file con la versión del repository y hacer la fusión y el logging. Pero a menudo las fusiones son automáticas.
  1. Tendrás tres repositorys Git. Un repository central (desnudo) y uno privado para cada desarrollador. Coloque el repository central en un server en alguna parte, coloque las copys privadas en sus discos duros.

  2. Cuando desee get una copy del código, use git clone . Cuando desee actualizar su copy del código, use git pull , o use git fetch seguido de git merge (que es lo mismo). No copie una carpeta con un repository de Git manualmente.

  3. Siempre que termine de hacer un cambio lógico en el proyecto, envíe el cambio al repository central. Si el otro desarrollador presionó primero, obtendrá un conflicto. Por lo tanto, tendrá que extraer los cambios del otro desarrollador, combinarlos en su código (o rebase, si lo desea) y volver a presionar. Si ambos realizan cambios en el mismo código, obtendrán un conflicto de combinación cuando se fusionen en su máquina local. Resuelve la fusión localmente y luego envía la versión final (¡probada!) Al server central.

No acceda al repository central solo porque es el final del día. Si al final del día está a la mitad de un cambio, terminará compartiendo un código dañado que no es bueno para su pareja. Espere hasta que haya terminado con su cambio y luego presione.

Como alternativa, puede pasar a una sucursal separada en el server central si tiene algo en progreso.