--- - name: Ensure git's dependencies are installed (RedHat). package: "name={{ item }} state=installed" with_items: - gettext-devel - expat-devel - curl-devel - zlib-devel - perl-devel - openssl-devel - subversion-perl - make - gcc when: ansible_os_family == 'RedHat' - name: Ensure git's dependencies are installed (Debian). apt: "name={{ item }} state=installed" with_items: - libcurl4-gnutls-dev - libexpat1-dev - gettext - libssl-dev - build-essential - gcc when: ansible_os_family == 'Debian' - name: Get installed version command: > git --version warn=no changed_when: false failed_when: false check_mode: no register: git_installed_version - name: Force git install if the version numbers do not match set_fact: git_reinstall_from_source: true when: 'git_install_from_source_force_update and (git_installed_version|success and (git_installed_version.stdout | regex_replace("^.*?([0-9\.]+)$", "\\1") | version_compare(git_version, operator="!=")))' - name: Download git. get_url: url: "https://www.kernel.org/pub/software/scm/git/git-{{ git_version }}.tar.gz" dest: "{{ workspace }}/git-{{ git_version }}.tar.gz" when: git_installed_version|failed or git_reinstall_from_source - name: Expand git archive. unarchive: src: "{{ workspace }}/git-{{ git_version }}.tar.gz" dest: "{{ workspace }}" creates: "{{ workspace }}/git-{{ git_version }}/README" copy: no when: git_installed_version|failed or git_reinstall_from_source - name: Build git. command: > make prefix={{ git_install_path }} {{ item }} chdir={{ workspace }}/git-{{ git_version }} with_items: - all - install when: git_installed_version|failed or git_reinstall_from_source become: yes