Повторно создайте теги с новыми желаемыми данными. Но если кто-то еще имел их раньше, они не могут принять ваших новых. Или они могут! Это [до g5] их .
Я знаю, что вы можете изменить автора и имя / дату коммиттера Git Commit
blockquote>На самом деле, вы не можете , и тот факт, что вы не можете (и что вы можете сделать вместо этого), играет важную роль в остальной части ответа.
Все объекты Git имеют идентификатор хэша как свое «истинное имя». Хэш формируется путем вычисления криптографической контрольной суммы содержимого объекта. Это означает, что вы никогда не сможете вообще изменить какой-либо объект Git.1 То, что вы можете выполнить , - это создать новый объект , а затем убедить всех, у кого старый объект прекратил его использовать, и использовать вместо этого новый объект.
Это то, что делает
git commit --amend
(и что могут делать различные варианты интерактивной переадресации, такие какedit
иreword
). Сначала мы извлекаем исходный объект Git в обычные данные, где мы можем манипулировать им; то мы делаем манипуляции и просим Git построить новый объект; и, наконец, мы прекращаем использовать старый объект и вместо этого начинаем использовать новый.Для фиксации, которая является командой commit (см. определение главы в gitglossary ), все это проходит довольно легко и гладко, если мы еще не подтолкнули это сообщение. Нет никаких дополнительных коммитов, ссылающихся на этот коммит, поэтому мы создаем новый коммит, который «так же хорош», перенаправляет название ветки ( head ) на новый коммит и забывает о оригинале мы только что заменили. Это выглядит как , мы изменили фиксацию, но вместо этого получим новый хеш-идентификатор.
Как это относится к тэгам
Git имеет два типа тегов, легкий тег и аннотированный тег . Разница между ними заключается в том, что аннотированный тег состоит из легкого тега, указывающего на объект тега . Это объект тега, который имеет информацию тегов. (Легкий тег не имеет такой информации, он просто указывает на объект фиксации.)
Следовательно, чтобы «изменить» объект тега, мы должны сделать то же самое, что и мы, чтобы «изменить» «объект фиксации: скопируйте его в объект тега new .
Для этого нет встроенной команды, но легко построить один из
git cat-file -p
- это позволяет извлекать исходный тег в обычные данные иgit mktag
, что позволяет превращать обычные данные в новый объект тега. Например, тегv2.2.1
в репозитории Git для Git начинается с:$ git cat-file -p v2.2.1 object 9b7cbb315923e61bb0c4297c701089f30e116750 type commit tag v2.2.1 tagger Junio C Hamano <...
Линией
object
является фиксация, на которую указывает тег:$ git cat-file -t 9b7cbb315923e61bb0c4297c701089f30e116750 commit
, поэтому мы можем скопировать этот тег в новый с другим
tagger
:$ new_hash_id=$(git cat-file -p v2.2.1 | sed -e .... | git mktag) $ git update-ref refs/tags/$name $new_hash_id
, где
sed
делает все, что необходимо (см. ниже), а$name
- имя тег. Затем мы сделаем легкий тегv2.2.1
укажем на этот новый объект тега в$new_hash_id
. Но есть две проблемы (только один из которых, вероятно, применим к вашему делу).Метки могут быть PGP-подписанными
Вышеупомянутый тег далее говорит:
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1
, а затем в нем есть подпись PGP. Эта подпись охватывает все данные, за исключением самой подписи. Если вы копируете и изменяете этот тег, вы должны полностью отменить оригинальную подпись (это будет недействительным и не будет применено к тестированию); вы можете и должны заменить его новой подписью, и если да, то чей, зависит от вас.
Теги не должны изменять целевые объекты
Существующий легкий тег
v2.2.1
в настоящее время указывает на существующий объект тега:$ git rev-parse v2.2.1 7c56b20857837de401f79db236651a1bd886fbbb
Это данные, которые мы просматривали до этой точки.
new тег будет иметь другой, другой идентификатор хэша. Когда мы внесли поправки в неопубликованное коммитирование, это было неважно, потому что никто другой не подозревал, что какое-либо имя ветви сопоставлено определенному идентификатору хэша.
Метки, однако, являются довольно часто «хорошо известно». Фактически, точка тегов, в частности PGP-подписанные аннотированные теги, где подпись PGP позволяет проверить, что никто не обезглавил данные тега, - это гарантировать , что вы можете быть уверены, что этот тег является правым тегом и что объект фиксации, на который он указывает, является исходным фиксатором, а не некоторым троянским коньком. Если вы измените существующий тег, вы пресекаете это намерение. Более того, некоторые люди, которые знают значение предыдущего тега, просто откажутся принять новое значение: вы не будете способным , чтобы заставить их обновить существующий тег. Пока вы это делаете перед , у кого-либо еще есть тег, они никогда не узнают, и все будет хорошо.
1Or, вы не можете измените содержимое объекта Git, если вы не можете сломать хэш . См. Также . Как недавно обнаруженное столкновение sha1 влияет на git?
Да, вы МОЖЕТЕ это сделать.
Используя pointer-events: none
вместе с условными операторами CSS для IE11 (не работает в IE10 или ниже), вы можете получить решение, совместимое с браузером для этой проблемы.
Используя AlphaImageLoader
, вы можете даже поместить прозрачные .PNG/.GIF
s в оверлей div
и щелкнуть по элементам внизу.
CSS:
pointer-events: none;
background: url('your_transparent.png');
IE11 условно:
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='your_transparent.png', sizingMethod='scale');
background: none !important;
Еще одна идея попробовать (ситуационная):
Любые мысли?
просто оберните тэг вокруг всего извлечения html, например
<a href="/categories/1">
<img alt="test1" class="img-responsive" src="/assets/photo.jpg" />
<div class="caption bg-orange">
<h2>
test1
</h2>
</div>
</a>
в моем примере класс caption имеет эффекты зависания, что с указателями-событиями: none; вы просто потеряете
, чтобы содержимое сохраняло ваши эффекты зависания, и вы можете щелкнуть по всему изображению, включая div, !
В настоящее время я работаю с воздушными шарами на холсте. Но поскольку баллон с указателем завернут в div, некоторые ссылки под ним больше не будут доступны. В этом случае я не могу использовать extjs. См. базовый пример для моего учебника по речевому шару , который требует HTML5
. Поэтому я решил собрать все координаты ссылок изнутри воздушных шаров в массиве.
var clickarray=[];
function getcoo(thatdiv){
thatdiv.find(".link").each(function(){
var offset=$(this).offset();
clickarray.unshift([(offset.left),
(offset.top),
(offset.left+$(this).width()),
(offset.top+$(this).height()),
($(this).attr('name')),
1]);
});
}
Я вызываю эту функцию на каждом (новом) шаре. Он захватывает координаты левого / верхнего и правого / нижних углов link.class - дополнительно атрибут name для того, что делать, если кто-то нажимает на эти координаты, и я любил устанавливать 1, что означает, что он не щелкнул струей , И переместите этот массив на клик. Вы можете использовать push тоже.
Чтобы работать с этим массивом:
$("body").click(function(event){
event.preventDefault();//if it is a a-tag
var x=event.pageX;
var y=event.pageY;
var job="";
for(var i in clickarray){
if(x>=clickarray[i][0] && x<=clickarray[i][2] && y>=clickarray[i][1] && y<=clickarray[i][3] && clickarray[i][5]==1){
job=clickarray[i][4];
clickarray[i][5]=0;//set to allready clicked
break;
}
}
if(job.length>0){
// --do some thing with the job --
}
});
Эта функция проверяет координаты события щелчка тела или уже была нажата и возвращает атрибут имени , Я думаю, что нет необходимости идти глубже, но вы видите, что это не так сложно. Надеюсь, что это было ...
Также приятно знать ... Вы можете отключить указатели-события в родительском элементе (возможно, прозрачном div), но он все еще разрешен для его дочерних элементов. Это полезно, если вы работаете с несколькими перекрывающимися слоями div, где вы хотите иметь возможность нажимать дочерние элементы, в то время как родительские слои не реагируют на какие-либо события мыши вообще. Для этого все родительские divs получают pointer-events: none
, а его интерактивные дочерние элементы возвращают события-указатели pointer-events: auto
.parent {
pointer-events:none;
}
.child {
pointer-events:auto;
}
<div class="some-container">
<ul class="layer-0 parent">
<li class="click-me child"></li>
<li class="click-me child"></li>
</ul>
<ul class="layer-1 parent">
<li class="click-me-also child"></li>
<li class="click-me-also child"></li>
</ul>
</div>
Нет, вы не можете нажать «через» элемент. Вы можете получить координаты щелчка и попытаться определить, какой элемент находился под элементом clicked, но это действительно утомительно для браузеров, у которых нет document.elementFromPoint
. Затем вам все равно придется эмулировать действие нажатия по умолчанию, которое не обязательно тривиально, в зависимости от того, какие элементы у вас там.
Поскольку у вас есть полностью прозрачная область окна, вы, вероятно, будете лучше использовать его в качестве отдельных элементов границы вокруг, оставляя центр без препятствий, чтобы вы могли просто щелкнуть прямо.
Вы можете поместить AP-наложение, например ...
#overlay {
position: absolute;
top: -79px;
left: -60px;
height: 80px;
width: 380px;
z-index: 2;
background: url(fake.gif);
}
<div id="overlay"></div>
просто переверните его туда, где вы не хотите, то есть клик. Работает во всех.
Я думаю, что вы можете рассмотреть возможность изменения разметки. Если я не ошибаюсь, вы должны поместить невидимый слой над документом, и ваша невидимая разметка может предшествовать вашему документу (это правильно?).
Вместо этого я предлагаю вам поставить невидимый сразу после изображения документа, но изменяя положение на абсолютное.
Обратите внимание, что вам нужен родительский элемент для размещения позиции: относительный, и тогда вы сможете использовать эту идею. В противном случае ваш абсолютный уровень будет размещен только в верхнем левом углу.
Элемент абсолютной позиции позиционируется относительно первого родительского элемента, который имеет позицию, отличную от статической. Если такой элемент не найден, то содержащий блок является html
Надеюсь, что это поможет. См. здесь для получения дополнительной информации о позиционировании CSS.
Я думаю, что event.stopPropagation();
следует упомянуть здесь. Добавьте это к функции щелчка вашей кнопки.
Предотвращает появление пузырьков в дереве DOM, предотвращая уведомление любого из обработчиков родительских событий.
это не работает. работа вокруг - это вручную проверить координаты щелчка мыши на области, занимаемой каждым элементом. Область
, занятая элементом, может быть найдена найденным 1. Получает местоположение элемента относительно вершины слева от страницы и 2. ширина и высота. библиотека, подобная jQuery, делает это довольно простым, хотя это можно сделать в простых js. добавление обработчика событий для mousemove
объекта document
обеспечит непрерывное обновление положения мыши сверху и слева от страницы. решая, находится ли мышь над любым данным объектом, состоит в проверке, находится ли положение мыши между левым, правым, верхним и нижним краями элемента.
Мне нужно было это сделать и решил пойти по этому пути:
$('.overlay').click(function(e){
var left = $(window).scrollLeft();
var top = $(window).scrollTop();
//hide the overlay for now so the document can find the underlying elements
$(this).css('display','none');
//use the current scroll position to deduct from the click position
$(document.elementFromPoint(e.pageX-left, e.pageY-top)).click();
//show the overlay again
$(this).css('display','block');
});
Я добавляю этот ответ, потому что я не видел его здесь полностью. Я смог сделать это, используя elementFromPoint. Итак, в основном:
var range-selector= $("")
.css("position", "absolute").addClass("range-selector")
.appendTo("")
.click(function(e) {
_range-selector.hide();
$(document.elementFromPoint(e.clientX,e.clientY)).trigger("click");
});
В моем случае оверлейный div абсолютно позиционирован - я не уверен, что это имеет значение. Это работает на IE8 / 9, Safari Chrome и Firefox по крайней мере.
Щелчок через DIV на базовый элемент работает в браузерах. Opera нуждается в ручной переадресации событий, Firefox и Chrome понимают CSS pointer-events:none;
, а IE ничего не нужно с прозрачным фоном; с. background:white; opacity:0; filter:Alpha(opacity=0);
IE нуждается в переадресации, как Opera.
См. тест пересылки в http://jsfiddle.net/vovcat/wf25Q/1/ и http://caniuse.com/pointer-events. Свойство CSS-указателя-событий перенесено из CSS3-UI в CSS4-UI.
$('#elementontop).click(function (e) { $('#elementontop).hide(); $(document.elementFromPoint(e.clientX, e.clientY)).trigger("click"); $('#elementontop').show(); });
pointer-events:none
, но документы утверждают, что это только для элементов SVG. – Andy E 6 August 2011 в 19:07