Estoy tratando de get una list de files en mi repository que no han sido tocados desde una date determinada.
Estaba tratando de hacer uso de git log --before="X months ago" --name-only
y luego comparando esa list con git log --after="X months ago" --name-only
pero no estoy seguro si hay una manera más fácil?
¿O hay una manera de get la date de commit de HEAD de cada file y filtrar la list? No estoy seguro de cuál es el mejor enfoque para esto.
Probablemente haya una mejor manera de hacerlo, pero esto debería funcionar:
git diff --name-only --stat @{2.weeks.ago} >> changed.txt && git ls-files >> all.txt && comm -23 all.txt changed.txt >> unchanged.txt
Que hace,
1: toma todos los nombres de files que se han cambiado y crea un file de text llamado changed.txt 2: toma todos los nombres de los files del repository y crea un file de text llamado all.txt 3: utiliza el command comm para suprimir las líneas comunes entre los dos files y salidas a un file llamado sin cambios.txt
Espero que esto ayude,
Gracias a esta solución de un amigo (Adam Morse).
Puede recorrer cada file y mostrar su time de modificación, es decir:
git ls-tree -r --name-only HEAD | while read filename; do echo "$(git log -1 --format="%ad" -- $filename) $filename" done
Esto producirá una salida así:
Fri Dec 23 19:01:01 2011 +0000 Config Fri Dec 23 19:01:01 2011 +0000 Makefile
PD : También puede usar: –format = "% ai" (mi preference) en lugar de –format = "% ad" para get mejores marcas de time orderables.
Con –format = "% ai" , la salida vendrá como:
2015-05-03 21:47:26 -0500 v1/ansible/runner/lookup_plugins/consul_kv.py 2015-05-03 21:47:26 -0500 v1/ansible/runner/lookup_plugins/csvfile.py 2015-05-03 21:47:26 -0500 v1/ansible/runner/lookup_plugins/dict.py 2015-05-03 21:47:26 -0500 v1/ansible/runner/lookup_plugins/dig.py 2015-05-04 01:33:10 -0500 lib/ansible/plugins/filter/__init__.py 2015-05-04 01:33:10 -0500 lib/ansible/plugins/filter/mathstuff.py 2015-05-05 15:24:36 +0200 docs/man/man1/ansible-playbook.1 2015-05-05 15:24:36 +0200 docs/man/man1/ansible-pull.1 2015-05-07 12:22:08 +0100 docsite/rst/playbooks_tags.rst 2015-05-07 22:24:33 +0000 ISSUE_TEMPLATE.md 2015-05-07 23:56:33 -0500 lib/ansible/plugins/cache/networkingis.py 2015-05-08 13:49:10 -0700 test/units/playbook/test_block.py 2015-05-11 08:06:21 -0400 lib/ansible/module_utils/openstack.py 2015-05-11 22:56:56 -0400 docsite/rst/playbooks_roles.rst 2015-05-12 12:18:55 -0400 v1/ansible/utils/module_docs_fragments 2015-05-12 12:24:57 -0500 test/units/executor/test_play_iterator.py 2015-05-12 12:24:57 -0500 test/units/playbook/test_play.py 2015-05-13 11:04:12 -0700 test/integration/roles/test_bad_parsing/tasks/scenario1.yml 2015-05-14 12:24:36 +0200 docsite/rst/intro_patterns.rst 2015-05-16 15:45:01 -0500 test/units/template/test_safe_eval.py 2015-05-16 15:45:01 -0500 test/units/template/test_vars.py 2015-05-17 01:29:40 -0500 test/units/module_utils/__init__.py 2015-05-17 01:29:40 -0500 test/units/module_utils/test_database.py 2015-05-18 17:26:59 -0700 test/units/plugins/action/__init__.py 2015-05-18 17:26:59 -0700 test/units/plugins/cache/__init__.py 2015-05-18 17:26:59 -0700 test/units/plugins/cache/test_cache.py 2015-05-18 22:44:29 +0200 test/integration/roles/test_cs_firewall/tasks/main.yml 2015-05-19 08:58:27 -0400 test/integration/cloudstack.yml 2015-05-19 15:37:47 -0500 test/integration/roles/test_rax_scaling_group/files/test.txt 2015-05-19 15:37:47 -0500 test/integration/roles/test_rax_scaling_group/meta/main.yml 2015-05-21 12:24:41 -0700 test/integration/roles/test_uri/files/testserver.py 2015-05-23 21:37:12 +0200 test/units/inventory_test_data/group_vars/noparse/all.yml~ 2015-05-23 21:37:12 +0200 test/units/inventory_test_data/group_vars/noparse/file.txt 2015-05-23 21:37:12 +0200 test/units/inventory_test_data/group_vars/parse/all.yml 2015-05-27 13:39:09 -0700 test/integration/roles/test_mysql_db/tasks/main.yml 2015-05-28 15:26:03 -0500 hacking/module_formatter.py 2015-05-28 15:26:03 -0500 v1/tests/inventory_test_data/simple_hosts 2015-05-28 15:26:03 -0500 v1/tests/TestInventory.py 2015-05-29 21:49:52 -0400 docsite/rst/guide_aws.rst 2015-05-30 11:35:55 +0200 lib/ansible/utils/module_docs_fragments/cloudstack.py 2015-05-31 23:15:28 -0400 test/integration/roles/prepare_win_tests/meta/main.yml 2015-05-31 23:16:45 -0400 test/integration/test_winrm.yml 2015-06-01 16:41:52 -0500 lib/ansible/parsing/yaml/dumper.py 2015-06-01 21:53:49 +0100 test/integration/roles/test_win_copy/tasks/main.yml 2015-06-02 11:43:35 -0700 packaging/rpm/ansible.spec 2015-06-02 23:39:57 -0400 lib/ansible/utils/path.py 2015-06-02 23:42:00 -0400 lib/ansible/plugins/lookup/password.py 2015-06-03 13:27:31 -0700 lib/ansible/plugins/inventory/__init__.py 2015-06-03 21:19:11 +0200 lib/ansible/module_utils/f5.py 2015-06-03 22:19:26 -0400 hacking/templates/rst.j2 2015-06-04 11:34:56 -0500 v1/ansible/utils/module_docs.py 2015-06-04 15:43:07 -0400 lib/ansible/executor/module_common.py 2015-06-05 07:25:37 -0400 test/integration/roles/test_failed_when/tasks/main.yml 2015-06-05 15:34:37 -0500 test/units/module_utils/test_basic.py 2015-06-06 09:13:14 -0500 lib/ansible/playbook/helpers.py 2015-06-08 19:32:44 -0400 docsite/rst/playbooks_intro.rst 2015-06-09 11:45:53 -0400 lib/ansible/plugins/action/package.py 2015-06-10 15:42:30 +0200 README.md 2015-06-11 13:03:25 -0400 test/units/mock/loader.py 2015-06-11 13:43:47 -0400 lib/ansible/plugins/lookup/file.py 2015-06-12 12:32:02 -0700 lib/ansible/plugins/lookup/url.py 2015-06-15 17:42:40 -0400 test/integration/roles/test_lookups/vars/main.yml 2015-06-16 11:00:03 -0400 docsite/_themes/srtd/layout.html 2015-06-16 14:20:34 +0000 v1/ansible/module_utils/powershell.ps1 2015-06-17 23:31:31 -0400 lib/ansible/plugins/connections/paramiko_ssh.py 2015-06-19 23:04:35 -0400 lib/ansible/template/vars.py 2015-06-21 01:24:35 -0400 lib/ansible/plugins/connections/local.py 2015-06-21 01:51:28 -0400 lib/ansible/plugins/shell/sh.py 2015-06-22 01:17:09 -0400 lib/ansible/playbook/block.py 2015-06-22 02:06:07 -0400 lib/ansible/inventory/group.py 2015-06-23 08:52:57 -0700 docsite/rst/quickstart.rst 2015-06-23 10:19:50 -0400 lib/ansible/playbook/role/include.py 2015-06-23 12:12:38 -0400 lib/ansible/plugins/connections/ssh.py 2015-06-23 13:00:32 -0700 docsite/rst/intro_configuration.rst 2015-06-23 20:48:13 -0400 docsite/rst/faq.rst 2015-06-24 01:00:22 -0700 lib/ansible/plugins/connections/chroot.py 2015-06-26 23:38:06 -0700 docsite/rst/test_strategies.rst 2015-06-27 00:58:03 -0400 lib/ansible/playbook/task.py 2015-06-27 01:01:08 -0400 lib/ansible/playbook/attribute.py 2015-06-28 00:30:27 -0400 lib/ansible/playbook/conditional.py 2015-06-29 11:13:17 -0700 docsite/rst/playbooks_best_practices.rst 2015-06-30 09:38:12 -0500 test/integration/roles/test_rax_cbs_attachments/tasks/main.yml 2015-06-30 09:38:12 -0500 test/integration/roles/test_rax_cbs/tasks/main.yml 2015-06-30 16:08:46 -0400 lib/ansible/playbook/playbook_include.py 2015-07-01 01:48:19 -0400 test/units/playbook/test_playbook.py 2015-07-01 01:48:19 -0400 test/units/playbook/test_taggable.py 2015-07-01 07:23:26 -0700 .travis.yml 2015-07-01 15:10:25 -0400 lib/ansible/plugins/action/patch.py 2015-07-01 18:34:44 -0400 lib/ansible/plugins/filter/ipaddr.py 2015-07-02 14:37:51 +0100 v1/ansible/runner/filter_plugins/core.py 2015-07-02 18:59:58 +0000 hacking/test-module 2015-07-03 13:54:31 -0400 lib/ansible/plugins/lookup/sequence.py 2015-07-03 22:27:49 +0200 lib/ansible/template/__init__.py 2015-07-04 10:23:30 -0400 lib/ansible/cli/galaxy.py 2015-07-05 17:23:22 +0100 lib/ansible/module_utils/facts.py 2015-07-06 10:21:40 +0300 docsite/rst/intro_installation.rst 2015-07-06 13:15:11 -0700 lib/ansible/parsing/splitter.py 2015-07-07 11:28:20 +0200 docsite/rst/index.rst 2015-07-08 09:45:02 -0700 lib/ansible/module_utils/basic.py 2015-07-08 10:11:43 -0400 ticket_stubs/needs_template.md 2015-07-08 20:39:16 -0400 contrib/inventory/rax.py 2015-07-09 08:23:43 -0400 lib/ansible/inventory/host.py 2015-07-09 10:50:31 -0400 test/integration/cnetworkingentials.template 2015-07-09 10:50:31 -0400 test/integration/roles/test_azure/tasks/main.yml 2015-07-10 01:53:59 -0400 test/integration/non_destructive.yml 2015-07-10 23:48:12 -0400 lib/ansible/plugins/callback/timer.py 2015-07-11 00:47:59 -0400 lib/ansible/plugins/callback/syslog_json.py 2015-07-11 15:01:50 -0400 lib/ansible/plugins/callback/default.py 2015-07-11 21:49:35 -0400 lib/ansible/playbook/role/__init__.py 2015-07-12 16:10:34 -0400 lib/ansible/plugins/callback/mail.py 2015-07-12 16:39:27 -0400 lib/ansible/parsing/__init__.py 2015-07-12 16:39:27 -0400 lib/ansible/playbook/role/definition.py 2015-07-12 16:39:27 -0400 lib/ansible/plugins/__init__.py 2015-07-13 10:34:44 -0400 lib/ansible/plugins/action/assemble.py 2015-07-13 11:06:03 -0400 lib/ansible/plugins/cache/jsonfile.py 2015-07-13 15:42:47 -0400 lib/ansible/cli/adhoc.py 2015-07-13 20:42:09 -0400 lib/ansible/plugins/action/raw.py 2015-07-14 00:23:17 -0400 test/integration/roles/test_command_shell/tasks/main.yml 2015-07-14 07:28:32 -0400 lib/ansible/module_utils/powershell.ps1 2015-07-14 08:05:57 -0400 test/integration/roles/test_good_parsing/tasks/main.yml 2015-07-14 10:07:46 -0400 lib/ansible/utils/module_docs.py 2015-07-14 15:59:00 -0400 test/units/executor/test_task_executor.py 2015-07-14 16:47:47 -0400 lib/ansible/modules/extras 2015-07-14 17:03:57 -0400 lib/ansible/modules/core 2015-07-14 17:33:27 -0400 lib/ansible/cli/doc.py 2015-07-15 01:55:45 -0400 lib/ansible/plugins/strategies/__init__.py 2015-07-15 15:11:46 -0400 lib/ansible/executor/task_executor.py
El command lit-tree de git tiene la ventaja de enumerar solo los files almacenados en el repository, omitiendo la carpeta .git e ignorando los files.
Si envía la salida de la operación anterior a un file .txt, puede orderar (sorting de Linux, ver si la opción -n puede ayudar) y luego tener un command BASH / one-liner para get todas las filas que son más antiguas que una marca de date / hora dada (como se muestra en el resultado anterior).
Buscar files modificados desde una confirmación:
git diff --name-only $thatcommit
Encuentra la confirmación más antigua desde febrero en la twig actual:
git log @ --first-parent --since='1 feb' --pretty=%H --reverse | sed q
Asi que
( git log @ --first-parent --since="$date" --pretty=%H --reverse | sed q \ | xargs git diff --name-only git ls-files ) \ | sort | uniq -u
enumera todos los files que se han cambiado, luego enumera todos los files que hay, luego imprime solo los que no se enumeraron dos veces.