Когда я слышу этот фразеологизм, сразу почему-то вспоминаю песню Игоря Саруханова. Там то ли "скрипка-лиса", то ли "скрип колеса". Так и здесь: кто-то говорит "скрепя сердце", а кто-то - "скрипя сердцем". А правильно как? Скрипеть или скрепить? Правильно - "скрепя сердце". Мы путаемся потому, что деепричастие "скрепя" стало устаревшим и самостоятельно давно уже не употребляется. Да и по нормам русского языка правильнее будет "скрепив". Но в составе фразеологизма слова остаются неизменными. Есть еще церковное слово "окропя" - кровный "брат"нашего деепричастия. Фраза "скрепя сердце" означает "сделать что-то через силу, неохотно". Дословно это значит "укрепить свое сердце волевым решением". Но нам привычнее, что без желания мы "скрипим", например, зубами. Да и слово "скрипеть" как-то благозвучнее, другое дело, что сердце никак не может издавать такие звуки. Кстати, хоть в составе фразеологизма и деепричастие, оборот запятыми на письме не выделяется. В предложении он играет роль наречия.