Примечание. Несмотря на то, что я разместил собственное решение, я бы рекомендовал использовать git-up , что также является принятым ответом.
Я знаю, что этот вопрос почти 3 года, но я задал себе тот же вопрос и не нашел готового решения. Итак, я создал собственный скрипт командной оболочки git.
Здесь он идет, скрипт git-ffwd-update
делает следующее ...
git remote update
, чтобы получить значения lates revs git remote show
, чтобы получить список локальных ветвей, отслеживающих удаленную ветвь (например, ветви, которые могут использоваться с git pull
) git rev-list --count ..
, сколько из них фиксирует локальную ветвь за пультом (и наоборот наоборот) git branch -l -f -t
скрипт можно вызвать как:
$ git ffwd-update
Fetching origin
branch bigcouch was 10 commit(s) behind of origin/bigcouch. reseting local branch to remote
branch develop was 3 commit(s) behind of origin/develop. reseting local branch to remote
branch master is 6 commit(s) behind and 1 commit(s) ahead of origin/master. could not be fast-forwarded
Полный скрипт должен быть сохранен как git-ffwd-update
и должен находиться на PATH
.
#!/bin/bash
main() {
REMOTES="$@";
if [ -z "$REMOTES" ]; then
REMOTES=$(git remote);
fi
REMOTES=$(echo "$REMOTES" | xargs -n1 echo)
CLB=$(git branch -l|awk '/^\*/{print $2}');
echo "$REMOTES" | while read REMOTE; do
git remote update $REMOTE
git remote show $REMOTE -n \
| awk '/merges with remote/{print $5" "$1}' \
| while read line; do
RB=$(echo "$line"|cut -f1 -d" ");
ARB="refs/remotes/$REMOTE/$RB";
LB=$(echo "$line"|cut -f2 -d" ");
ALB="refs/heads/$LB";
NBEHIND=$(( $(git rev-list --count $ALB..$ARB 2>/dev/null) +0));
NAHEAD=$(( $(git rev-list --count $ARB..$ALB 2>/dev/null) +0));
if [ "$NBEHIND" -gt 0 ]; then
if [ "$NAHEAD" -gt 0 ]; then
echo " branch $LB is $NBEHIND commit(s) behind and $NAHEAD commit(s) ahead of $REMOTE/$RB. could not be fast-forwarded";
elif [ "$LB" = "$CLB" ]; then
echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. fast-forward merge";
git merge -q $ARB;
else
echo " branch $LB was $NBEHIND commit(s) behind of $REMOTE/$RB. reseting local branch to remote";
git branch -l -f $LB -t $ARB >/dev/null;
fi
fi
done
done
}
main $@
порядок не гарантируется, возможность доставки сообщений более одного раза и более одного EC2, получающего одно и то же сообщение
. Вероятность получения одного и того же сообщения более одного раза низкий. Это просто «возможно», но не очень вероятно. Если это по существу только раздражение, если в отдельных случаях вам придется обрабатывать файл более одного раза, то SQS кажется вполне разумным вариантом.
В противном случае вам понадобится внешний механизм.
Установка «заблокированного» заголовка объекта имеет свою проблему - когда вы перезаписываете объект с помощью самой копии (это происходит при изменении метаданных - новой копии объекта создается с одним и тем же ключом), тогда вы подвержены строкам и стрелкам возможной согласованности.
Q: Какая модель согласованности данных использует Amazon S3?
Amazon Ведра S3 во всех регионах обеспечивают согласованность после записи для PUTS новых объектов и возможную согласованность для перезаписывания ПУТС и DELETES.
https://aws.amazon.com/s3/faqs/
Обновление метаданных - это «переписать
PUT
». Ваш новый заголовок может быть не сразу видимым, и если два или более рабочих задают свой собственный уникальный заголовок (например, x-amz-meta-locked: i-12345678), вполне возможно, что сценарий, подобный следующему, будет воспроизведен (W1, W2 = Worker # 1 и # 2):W1: HEAD object (no lock header seen) W2: HEAD object (no lock header seen) W1: set header W2: set header W1: HEAD object (sees its own lock header) W2: HEAD object (sees its own lock header)
Тот же самый или аналогичный сбой может произойти с несколькими различными перестановками времени.
Объекты не могут быть эффективно заблокированы в возможная среда согласования.