¿Cómo conectar git a ClearCase?


Recientemente he usado git svn y lo he disfrutado mucho. Ahora estoy empezando un nuevo proyecto con un cliente diferente. En ese sitio el SCM de elección es ClearCase. No he encontrado un equivalente horneado de git svn para ClearCase. ¿Hay alguien que haya intentado usar git localmente como front-end para ClearCase usando algunos trucos, configuración o scripting con alguna medida de éxito? En caso afirmativo, ¿puede explicar el método utilizado?

Author: Bas Bossink, 2010-02-26

3 answers

Aquí hay un método que evita los secuestros, que nuestro equipo utilizó este método con bastante éxito durante más de un año, hasta que retiramos ClearCase para Subversion (según la política de la compañía, aunque es un paso atrás para nuestro equipo - básicamente estábamos usando ClearCase como un sistema de archivos tonto, y prácticamente trabajando de forma nativa en git, pero ahora estamos usando el puente git-svn que no es tan agradable como el git nativo.)

Utilizamos dos directorios, uno para la instantánea ClearCase y el repositorio master git, que compartido entre todo el equipo y nunca editado archivos en, y uno para nuestro directorio "de trabajo".

La preparación en la vista instantánea de ClearCase es:

% git init
% git add **/*.cxx **/*.h **/Makefile (and so on)
% git commit -m "initial"

Luego clona en tu directorio de trabajo:

% mkdir ~/work
% git clone /path/to/repo

Trabaja en el directorio de trabajo, en una rama:

% git checkout -b feature
% ...edit/compile...
% git add -u
% git commit

Asegúrese de que la instantánea de ClearCase esté actualizada con pristine (que siempre fue para nosotros, porque la compartimos entre el equipo, y todos usamos git).

Luego fusionar la rama en el para evitar una confirmación de fusión automática:

% git checkout master
% git pull
% git checkout feature
% git rebase master
% git checkout master
% git merge feature
% git branch -d feature

% git diff --name-status origin/master

Prepare la vista ClearCase revisando/mkelem / rmname cualquier archivo cambiado / nuevo / eliminado, basado en la salida de git diff --name-status. Usamos un guión hecho a mano para hacer esto. No se olvide de revisar los directorios que han añadido / eliminado archivos:

Luego empuja las cosas de git hacia atrás, y comprueba con ClearCase:

% git push
% cd /path/to/repo
% git reset --hard
% cleartool ci `cleartool lsco -r -short -me`

Parece que hay muchos comandos, pero esto incluye la configuración, y su flujo de trabajo diario no usa muchos comando. Puedes construir trivialmente un script alrededor del paso push-back-to-ClearCase, y descubrir/mostrar a tu equipo todas las cosas interesantes de git adicionales gradualmente a medida que todos se acostumbren al flujo de trabajo básico.

La verdadera belleza de este sistema es que, después de un tiempo cuando todos son competentes con git, puede deshacerse trivialmente de ClearCase y todo el trabajo y las tarifas individuales asociadas. Tal vez darle al chico ClearCase de la compañía unas vacaciones muy necesarias y un poco de reciclaje con los ahorros. (Tristemente en mi empresa, las cosas de git eran todas skunkworks, y nos hemos movido a Subversion: ¡hacia adelante desde ClearCase pero hacia atrás desde git!)

I strongly recomiendo usar el script pristine de ClearCase Globalmente, Git Localmente, que se ejecuta en la vista instantánea de ClearCase y asegura que git y él estén sincronizados. Configuramos esto como un trabajo cron que se ejecutaba dos veces al día, y también lo ejecutábamos manualmente cada vez que estábamos a punto de volver a git. Desafortunadamente el enlace a la entrada del blog ya no está valido. Sin embargo, el script todavía está disponible en Github.

 35
Author: Matt Curtis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-23 10:04:27

Si bien no puede ser sin algunas verrugas (se les ha advertido), siento que debo mencionar que he escrito una especie de puente.

Http://github.com/charleso/git-cc

Hacer un puente entre los dos sistemas no es fácil, y me gustaría que mi solución fuera tan buena como git-svn. Una gran limitación es que realmente estás confinado a duplicar una sola secuencia; git-cc no puede clonar todas tus ramas de Clearcase (por muy bonito que sea). Sin embargo, dado que la mayor parte de la alternativa los scripts se resuelven alrededor de una única vista Clearcase en la que no está peor (IMO).

Personalmente encuentro el historial bastante importante y lo que otras soluciones carecen es su importación del historial en Git. Poder ejecutar git-blame en archivos y ver a sus autores reales es bastante útil de vez en cuando.

Si nada más git-cc puede manejar el mencionado paso 'git log name name-status' en la solución de Matt anterior.

Ciertamente tengo curiosidad por escuchar lo que VonC y Matt (y otros) piensan de esto, ya que estoy de acuerdo en que cualquier puente a Clearcase está lleno de dificultades y puede ser más problemático de lo que vale.

 12
Author: charleso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-19 21:18:00

El único proceso que suelo seguir es:

  • snapshot cd dentro de un ClearCase view/vobs/myComponent
  • git init .

Eso me permite considerar un componente ClearCase como un repositorio Git.
Luego puedo hacer todas las bifurcaciones y confirmaciones "privadas" que quiera dentro de ese repositorio, haciendo que el archivo pueda escribirse cuando lo necesite (posible dentro de una vista de instantánea).

Una vez que tengo una confirmación final estable, actualizo mi vista de instantánea, que lista todos los archivos "secuestrados": los checkeo y hago check-in de vuelta a ClearCase.

Considerando el Git limits, un repo por componente ClearCase (UCM) es el tamaño correcto para un repo de Git.
Ver también ¿Cuáles son los conceptos básicos de clearcase que todo desarrollador debe conocer? para una comparación entre ClearCase y Git.

La idea permanece:

  • no git-cc
  • no hay necesidad de importar todo el historial de ClearCase (que no tiene noción de base de repositorio, a diferencia de las revisiones de SVN)
  • creación de un repositorio Git dentro de una vista ClearCase para commits intermedios
  • final Git commit reflejado en la vista ClearCase a través de un checkin de todos los archivos modificados.
 5
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:34