Я использую git
предварительно совершить крюк:Git Pre-Commit Использование Sed Для Динамически Вводят Название филиала
- Получить текущее имя ветви
- Вставьте название филиала в код изображения состояния сборки
- Найдите файл README.md для строки/шаблона, а затем используйте эту строку/шаблон в качестве маркера для того, где я хочу вставить динамически созданный образ состояния сборки.
Обратите внимание, что я использую OSX El Capitan v10.11.5, и для выполнения этого кода мне пришлось запустить chmod +x .git/hooks/pre-commit
в сценарии предварительной фиксации.
Вот код, который я использую:
#!/bin/bash
function git_branch {
git rev-parse --abbrev-ref HEAD
}
branch=$(git_branch)
id="{{CODESHIP_CODE}}"
codeship_build_status="[ ![Codeship Status for ExampleUser/exampleRepo](https://codeship.com/projects/a99d9999-9b9f-9999-99aa-999k9b9b0999/status?branch=$branch)](https://codeship.com/projects/999999)"
sed -i -e "s%{{CODESHIP_CODE}}%$codeship_build_status%g" README.md
На данный момент код вида работы. Под этим я имею в виду это:
- Правильно поиск README.md файл
- Удаление струнной/шаблон маркера
- Замена строки/шаблон маркер с переменной
codeship_build_status
.
Вопрос заключается в том, что это не по всей видимости, на самом деле изменения файла README.md до начала git commit
и вместо этого он создает еще один файл с именем README.md-е
Когда я иду в git push
и просмотреть код в репо, файл README.md не был обновлен и вместо этого содержит маркер строки/шаблона вместо обновленного образа состояния сборки. Как ни странно, файл README.md изменяется в моей локальной ветви развития.
Любые идеи, как исправить эту проблему или что может быть причиной этого?
++; это действительно проблема; quibble: '-i' не создает _new_-файл; скорее, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ это вывод 'sed', который создает _new_ файл, в конце концов переименованный в _original name_. (На стороне примечания: именно этот подход создает временный файл, а затем переименовывает его, чтобы заменить оригинал, который может вызвать проблемы, в первую очередь уничтожение символической ссылки.) – mklement0
Конечным результатом является то, что с '-i.bak ', вы получаете два файла: создается файл. С помощью '-i ''' вы получаете один файл. –
Нет аргументов в отношении результата _end. Я хотел сказать, что это _may matter_, что _original file_ _renamed_, а его замена - _new_, temp. файл, который затем переименован в исходный файл _name_. При таком подходе, который используется 'sed', вы потенциально потеряете следующие свойства файла _original_: в первую очередь, будь то символическая ссылка или нет_, но также и временная отметка _creation (в файловых системах, которые ее поддерживают (например, OSX)), _extended filesystem attributes_ (в файловых системах, которые его поддерживают (например, OSX)). (продолжение) – mklement0